算法和数据结构
小然然呀
Software Development Engineer.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解快速排序与快速排序的优化
1. 写在前面本文将从0开始编写快速排序的代码。希望阅读者最好要自己作图,思考执行过程,自己动手实现代码,如果默写代码,甚至背诵代码,就是本末倒置了。2. 文章结构主要讲解一路快排,二路快排和三路快排的实现过程,作图略。对于快排的复杂度以及其它背景知识可自行学习。3. 关于快排过程:选择一个参考点,以从小到大排序为例,那么在一次快排之后,在参考点左侧的数据都比参考点小,在参考点...原创 2019-07-09 02:29:06 · 616 阅读 · 0 评论 -
自上而下的归并排序
思想:归并排序是把两个小数组归并成一个数组的过程,两个小数组是什么样的数组呢?它们满足这样的关系: ①左右数组均有序过程:对于含有n个元素的数组,我们通过划分,将这个数组划分成n个有1个元素的数组,对于每个只有一个元素的数组来讲,它们显然是有序的。然后将每个数组按照一定的规则两两归并,最后的数组就成为有序的了。 例如,对于有八个元素的数组,我们将经过三次划分,即:第一次将原...原创 2019-07-05 20:56:20 · 669 阅读 · 0 评论 -
LeetCode #38报数
先看题目要求解决思路 用递归的思想解决问题 从第三项开始,每一项都对前一项的字符串进行拆分统计。为此,我们需要一个空的字符串和一个统计次数的变量count ,每一次比较arr[i]和arr[i-1]的值,若相等,则将count的值加1,若不相等,则将count的值置为1,当i指针遍历到数组最后一个元素时,将这个值与当前的count拼接起来,再将结果拼接到此前的字符串中即可。由于要...原创 2019-08-04 22:02:13 · 270 阅读 · 0 评论 -
LeetCode #561 数组拆分一
先看题目数组长度为2n,将它分割成n组,每组两个元素,将每组的最小值相加,使得相加后的数值最大。解决思路 将数组从小到大排序,取每个子数组的第一个元素进行相加操作。代码:class Solution { public int arrayPairSum(int[] nums) { Arrays.sort(nums); int re...原创 2019-08-04 22:27:57 · 197 阅读 · 0 评论 -
LeetCode #414 第三大的数
先看题目要求①找出数组中第三大的数②要求算法的时间复杂度为O(n)解决思路 要求算法的时间复杂度为O(n) 则先对数组进行排序,再取对应位置下标的思路是不可取的我采用的是每次都找当前数组最大值的方法,然后在下一轮循环中,将寻找到的最大值跳过。最终找到问题的解。代码:class Solution { public int thirdMax(int[] nums...原创 2019-08-04 22:34:03 · 231 阅读 · 0 评论
分享