分治思想
百晓生612
这个作者很懒,什么都没留下…
展开
-
归并排序基础
1.归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。核心代码private static void merge(int[] arr,int left,int mid,int right,int[] temp){ int i = left;//左序列指针原创 2022-03-31 11:10:58 · 209 阅读 · 0 评论 -
哪个数字超出一半
如有10个数字的数组,{1,2,7,7,7,7,7,7,3,9},其中7有6个,超出5个,那么这个数字就是7。思想:与排序相关方法:将数组排序之后,那么如果有超出数组长度一般的数字,中间位置的那个数一定就是我们要寻找的数。解法1:排序后返回arr[n/2]解法2:hash统计解法3:顺序统计解法4:不同的数进行消除采用简单的冒泡排序,数组排序之后,进行扫描。public static void main(String[] args) { // TODO Auto-g原创 2022-03-28 10:26:52 · 51 阅读 · 0 评论 -
最快求出乱序数组中按数值顺序的第K个元素值
思路:利用快速排序中的分区算法来解决分区算法(将小的数值挪到左侧,大的数挪到右侧)public static void main(String[] args) { // TODO Auto-generated method stub int[] arr= {3,1,5,7,8,2}; Scanner scan=new Scanner(System.in); int n=scan.nextInt(); int m=sec原创 2022-03-27 11:51:46 · 547 阅读 · 0 评论 -
调整数组顺序-奇数在左偶数在右
一般的思想是:创建一个数组,将原数组中的奇数放在新数组的左侧,将原数组的偶数放在新数组的右侧但是这样会消耗空间,所以考虑在原来数组上进行改变。设置两个指针,从左找偶数,从右找奇数,让找到偶数与找到的奇数位置交换。...原创 2022-03-27 11:07:13 · 1482 阅读 · 2 评论 -
快速排序算法
1.将一个数组从中间划分,分为左和右两部分,对左侧进行划分排序,对右侧进行划分排序,将结果合并。划分进行排是利用递归的方法。难点在于怎样将划分出来求得的结果合并。转载 2022-03-27 10:44:07 · 1873 阅读 · 0 评论 -
分治法的基础
分治法:将原问题划分为若干个规模较小的子问题,子问题的结果与原问题一致,递归地解决这些子问题,然后再将这些问题地结果合并,就得到原问题地解。分治模式再每一层递归上都有三个步骤:分解:将原问题分解为一系列子问题解决:递归解决子问题,若问题足够小,则直接有解合并:将子问题地结果合并成原问题的解分治法的关键点:子问题的解可以通过合并得到原问题的解子问题的分解以及解的合并一定是比较简单的,否则分解和合并所花的时间可能超出暴力解法,得不偿失。分治法的目的:1,解决问题2,提升效原创 2022-03-27 10:18:46 · 295 阅读 · 0 评论