摘要:
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n) 思路:可以按照归并的思想,开一个辅助空间,然后再使用快排的单向扫描分区的思想从数组开头扫描,奇数就放在辅助空间左侧,偶数放在右侧,但是这样的话就会消耗一个O(N)空间, 阅读全文
摘要:
归并排序(Merge Sort)算法完全依照了分治模式 分解:将 n 个元素分成各含 n/2 个元素的子序列; 解决:对两个子序列递归地排序; 合并:合并两个已排序地子序列以得到排序结果;和快速排序不同的是 归并的划分比较随意,快排重点就是划分 归并的重点就是合并,快排不需要合并 代码: 结果: 阅读全文
摘要:
一、快速排序扫描分区法 通过单向扫描,双向扫描,以及三指针分区法分别实现快速排序算法。着重理解分区的思想。 单向扫描分区法 思路:用两个指针将数组划分为三个区间,扫描指针(scan_pos)左边是确认小于等于主元的,扫描指针到某个指针(next_bigger_pos)中间为未知的,因此我们将第二个指 阅读全文
摘要:
分治法 分治法(divide and conquer,D&C):将原问题划分成若干个规模较小而结构与原问题一致的子问题 ;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 容易确定运行时间,是分治算法的优点之一。 分支模式在每一层递归上都有三个步骤: --分解(Divide):将原问题分解 阅读全文
摘要:
代码: 结果: 阅读全文
摘要:
题目:(1,9,2,5,7,3,4,6,8,0,)中最长的递增子序列为(3,4,6,8)。 代码: 结果: 阅读全文
摘要:
题目:有个排序后的字符串,其中散布着一些空字符串,编写一个方法,找出给定字符串(肯定不是空字符串)的索引。 代码: 阅读全文
摘要:
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 思路:这儿题目说了数组是有序的,为了提升效率,可以用二分查找去做,题目上也说了用二 阅读全文