768B - Code For 1 思路:类似于线段树的区间查询。 代码: ...
分类:
其他好文 时间:
2017-08-11 14:42:03
阅读次数:
129
大家都知道选择排序和冒泡排序,这两个排序都是双重for循环,时间复杂度为O(n^2),显然效率都是比较低的,而运用分治思想的归并排序和快速排序会更高效一些。 1、归并排序 1)原理:假设初始序列含有n个记录,则可以看成是n个有序子序列,每个子序列的长度为1,然后两两归并,得到[n/2]([x]表示不 ...
分类:
编程语言 时间:
2017-08-05 22:04:54
阅读次数:
226
算法思想: 分治+挖坑填数 分治思想 将原问题分解成若干规模更小但是结构和原问题相同的子问题。递归求解子问题,然后解出原问题。 快排算法思想 ①选择数组中第一个数作为基数,然后设置下标i=first,j=last ②(下标j–)从数组后面找出比第一个数小的数调换到前面 ③然后(下标i++)从数组前面 ...
分类:
编程语言 时间:
2017-08-05 06:31:36
阅读次数:
189
对于曾经,假设要我求第k小元素。或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路。 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法。其详细的分治思路例如以下: 1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分。使得A[p,q- ...
分类:
编程语言 时间:
2017-07-16 13:36:22
阅读次数:
110
快速排序:使用的是分治思想 (归并排序也是); (1)选一个元素M作为基准数。 (2)把小于等于M的元素放在数组的左边,大于M的元素放在数组右边;这是M的位置已是正确的,不再改变。 (3)对M左边、右边的的数组分别使用(1)(2),知道数组中只有一个元素。 性能: 最坏时间复杂度是O(n2),平均时 ...
分类:
编程语言 时间:
2017-06-30 14:00:37
阅读次数:
185
一、快速排序 核心:快排是一种采用分治思想的排序算法,大致分为三个步骤。 二、实现 实现方式一: 实现方式二: 实现方式三: main函数: 部分内容参考GitHub。 ...
分类:
其他好文 时间:
2017-06-18 11:58:05
阅读次数:
156
思路: 归并排序使用了分治思想进行实现。对一个数组进行二分法,使用递归实现二分法。 首先有一个数组C,可以将C数组分为A,B两组,然后各自再把A,B分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。 这样通过先递归的分解数列,再合 ...
分类:
编程语言 时间:
2017-06-04 21:30:01
阅读次数:
201
看到旁边的学弟也在做二分,就手贱2分钟打了一道奇(sha)特(bi)二分题。 原题传送门 好吧,做这道题是为了给新手一个教程 首先我们聊聊二分。 二分利用的也是分治思想 不懂分治思想的可以看看我归并做的那道火柴排队。 传送门 首先要了解一下二分的性质(也就是什么题目要用二分来写、) 我们假设一个题目 ...
分类:
编程语言 时间:
2017-05-13 16:59:39
阅读次数:
172
说到快拍,大家都会首先想到sort函数这个神奇的东西 但是,我们总得知道快拍主要用的分治思想 所以就说一说快拍吧 首先是分类 快拍主要有三种方式: 一、以第一个数为基准排序 二、以中间的数为基准快排 三、随机生成一个位置,用这个位置上的数快排 代码如下: ...
分类:
其他好文 时间:
2017-05-07 20:29:29
阅读次数:
171
对于给定的数组 numnum,一个长度为 ss 的连续子序列是指由 num_i,num_{i+1},num_{i+2}\ldots,num_{i+s-1}num?i??,num?i+1??,num?i+2??…,num?i+s?1?? 组成的序列。数组中的元素有可能为正数、负数或 00。你需要从数组 ...
分类:
其他好文 时间:
2017-04-25 23:38:45
阅读次数:
289