随笔分类 -  算法

摘要:转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。 先拿10000个数建堆,然后一次添加剩余元 阅读全文
posted @ 2018-11-24 21:38 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 漫画:什么是时间复杂度 时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景: 某一天,小灰和大黄同时加入了一个公司...... 一天过后,小灰和大黄各自交付了代码,两端代码实现的功能都差不多。 大黄的代码运行一次要花100毫秒,内存占用5MB。 小灰的代码运行一次要花100秒,内 阅读全文
posted @ 2018-09-27 19:10 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 Java最小堆解决TopK问题 TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据。 TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某搜索引擎要统计每天的100条搜索次数最多的关键词。 对于这个问题,解决方法有很多: 方法一:对源数据中 阅读全文
posted @ 2018-06-18 07:25 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 我猜,每个程序员对着电梯都想过调度算法吧 传统电梯调度算法 1.1 先来先服务算法(FCFS) 先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。 它根据乘客请求乘坐 阅读全文
posted @ 2018-05-06 14:33 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 递归算法介绍及Java应用实战 什么是递归算法 递归算法是把问题转化为规模缩小了的同类问题的子问题,然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数)。 递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部 阅读全文
posted @ 2018-04-24 11:16 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 玻璃猫 程序员小灰 小灰一边回忆一边讲述起当时面试的情景...... 题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数。如何找出这个缺失的整数? 解法一: 创建一个HashMap,以1到100为键,值都是0 。然后遍历整个数组,每读到一个整数,就找到HashMap 阅读全文
posted @ 2018-04-13 21:55 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 玻璃猫 程序员小灰 小灰回忆起当时的情景…… 题目:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法。要保证这三个方法的时间复杂度都是O(1)。 小灰的想法: 1.创建一个整型变量 min,初始值-1 2.当第一个元素进栈时,让min=0,即把唯一的元素当 阅读全文
posted @ 2018-04-13 21:49 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 玻璃猫 程序员小灰 小灰一边回忆一边讲述起当时面试的情景...... 题目:有一个无序整型数组,如何求出这个数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。(例如:无序数组 2,3,1,4,6,排序后是1,2,3,4,6,最大差值是6-4=2) 该解法的时间复杂度为O( 阅读全文
posted @ 2018-04-13 21:43 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:转载自 玻璃猫 程序员小灰 ———————————— 题目: 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。 再比如,每次走 阅读全文
posted @ 2018-04-13 14:05 茅坤宝骏氹 阅读(0) 评论(0) 推荐(0)
摘要:一、基数排序 (1)基数排序的简介 基数排序不同于其他的排序算法,它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。 通常用于对数的排序选择的是最低位优先法,即先对最次位关键字进行排序,再对高一位的关键字进行排序,以此类推。 (2)基数排 阅读全文
posted @ 2017-09-02 20:39 茅坤宝骏氹 阅读(302) 评论(0) 推荐(0)
摘要:一、归并排序原理 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 阅读全文
posted @ 2017-08-13 21:11 茅坤宝骏氹 阅读(189) 评论(0) 推荐(0)
摘要:一、希尔排序 (1)简介 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少, 阅读全文
posted @ 2017-08-13 19:21 茅坤宝骏氹 阅读(244) 评论(0) 推荐(0)
摘要:一、直接插入排序基本思想 直接插入排序(straight insertion sort)的做法是: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到 阅读全文
posted @ 2017-07-09 20:53 茅坤宝骏氹 阅读(193) 评论(0) 推荐(0)
摘要:一、快速排序(Quicksort)思想 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的 阅读全文
posted @ 2017-06-26 15:15 茅坤宝骏氹 阅读(194) 评论(0) 推荐(0)
摘要:一、冒泡排序(Bubble Sort)思想 (1)冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字 阅读全文
posted @ 2017-06-26 11:20 茅坤宝骏氹 阅读(197) 评论(0) 推荐(0)
摘要:一、堆(Heap)定义 (1)n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): k(i)<=k(2i)且k(i)<=k(2i+1)(1≤i≤ n/2 阅读全文
posted @ 2017-06-25 21:36 茅坤宝骏氹 阅读(241) 评论(0) 推荐(0)
摘要:一、树形选择排序的基本思想 (1) 树形选择排序又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。 (2) 树形选择排序(Tree Selectio 阅读全文
posted @ 2017-06-25 20:30 茅坤宝骏氹 阅读(644) 评论(0) 推荐(0)
摘要:一、 选择排序的思想 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换; 阅读全文
posted @ 2017-06-25 13:51 茅坤宝骏氹 阅读(170) 评论(0) 推荐(0)