算法
安静读书
站在巨人的肩膀上,指引巨人的方向。
展开
-
从10亿个数中找出前100个最大的
谈从10亿个数中找出前100个最大的(阿里java二面) 10亿个浮点数大概占据3G左右的空间,因此全部一次性读入内存目前在个人PC上是不太现实的。本次讨论不考虑内存等等,只考虑算法。 如果一次性比较排序,然后输出前面最大的100个,那么众所周知,算法的时间复杂度不下于O(N logN),此处的N为数的个数(10亿)。 如果用堆排序,由于堆排序像合并排序而不像插入排序,堆排序的运行时间为O(N logN);又像插入排序而不像合并排序,堆排序是一种原地排序。因此堆排序具有相对小的运行时间和占用相对小的额原创 2020-11-18 09:35:51 · 1140 阅读 · 0 评论 -
冒泡排序算法-思想+Java实现
冒泡排序思想 基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。 直观表达,每一趟遍历,将一个最大的数移到序列末尾。 算法描述 比较相邻的元素,如果前一个比后一个大,交换之。 第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。 第二趟将第二大的数移动至倒数第二位 ...... 因此需要n-1趟。 动图实现 ...原创 2020-08-27 23:06:32 · 283 阅读 · 0 评论 -
两个长整数相加
无论你面试的是什么岗位,应该都或多或少看到过这个问题 - 两个长整数相加(两数均为正整数)要怎么实现。如果a和b的位数不大,确实直接用类型转换就可以求出a+b了,但是万一a和b的位数都是几百位呢,早就溢出了,这时候要怎么计算呢? 这种情况下,有三种解决方法可供选择: 一、 用字符串来存储a和b的值; 二、 用数组来存储a和b的值; 三、 用StringBuffer按位存储; 四、 用链表来存储a和b的值。 这四种方法都有一个共同点,就是无论哪一种方法,都可以不用担心...原创 2020-06-27 12:04:40 · 737 阅读 · 0 评论