数据结构与算法
奕玄
学习、总结
展开
-
找出数组中第 k 大的数字及其出现次数
这是前端面试过程中遇到的一道算法题,虽说难度不大,但是也有些细节的地方需要仔细考虑。比如说数组 [1, 2, 4, 4, 3, 5],第 2 大的数字是 4,出现了 2 次。下面以这个为例展开算法的讲解。先说说大体的思路,然后再考虑一些细节性的问题。既然涉及到数字大小的问题,那就要对给定数组进行排序,题目要求“第 k 大”的数字,故选择降序的方式更有利于后面的查找;重点来了,需要遍...原创 2019-03-07 16:04:17 · 1486 阅读 · 0 评论 -
两个有序数组如何合并成一个有序数组
我这里考虑的两个数组均是升序排序,当然降序的两个数组进行合并算法是类似的。下面有两段相似的代码,第一段除了返回合并后的有序数组还将这两个有序数组清空了,该算法的思路是始终比较两个数组的首元素大小,然后将小者 shift 出来 push 到结果数组中去,因为总是会将数组首元素较小的那个移出,故不用改变比较数组的索引值,一直固定为 0 就行了。最后不要忘记将长度值大于 0 的数组中的元素移出放置到结...原创 2019-03-15 21:48:15 · 3841 阅读 · 0 评论 -
对数组中的数字 1 和 2 进行排序,使得数字 1、2 分别位于前、后部分
问题描述:假设某个数组中只有数字 1 和 2,进行排序,使得数字 1 位于数组前部分,数字 2 位于后部分。这道算法题其实不是很难,使用各种排序算法应该都能解出,但是若要考虑性能问题,那就得选择一种算法复杂度最低的解法。这里我使用双指针的方法来解答该题,时间复杂度为 O(n)。解法步骤(1)设置一个头指针、一个尾指针,头指针首先指向数组的第一个元素(索引为 0),而尾指针则指向数组的最后...原创 2019-03-11 21:47:21 · 1344 阅读 · 0 评论