类似于区间树,在各个节点保存的是一条线段(子数组),可高效解决连续区间动态查询问题。 *单点或区间的修改 区间的最值以及求和 可基本保持单次操作为log的复杂度。 线段树的每个节点表示一个区间,子节点则分别表示父亲节点的左半区间和右半区间。如果父亲节点是[a,b],那么令c = (a+b) / 2, ...
分类:
其他好文 时间:
2017-10-08 12:10:12
阅读次数:
170
O(N)求数组中小于等于K的最大子数组长度 1、先介绍O(NlogN)解法,虽然好像没什么相关。 对数组arr,要求最大子数组长度,我们可以先求以每一个位置结尾的符合条件的最大子数组长度,再取最大的。 先生成辅助数组helpArr,其中helpArr[i]表示arr[0~i]上所有数的累加和。 对于 ...
分类:
编程语言 时间:
2017-10-05 23:36:55
阅读次数:
346
1.快速排序的思想 a.用数组的首元素作为划分的标准,把小于 首元素的元素 划分到 左半部分,把大于 首元素的元素 划分到 右半部分。 b.在左右两半部分分别用调用 a 中的方法, 把子数组继续划分,直到子问题的 规模 划分 到 1 为止。 ...
分类:
编程语言 时间:
2017-10-05 22:40:21
阅读次数:
314
1.最大子段和问题的描述 2.分治策略的求解思路 用分治法求解这个问题 。 在数组的 center = (right-left)/2+left 位置处分开。形成两个子数组。 那么,最大子段和 可能出现在三个位置: a.可能出现在 左 子数组 b. 可能出现在 右子数组 c.可能出现在 过center ...
分类:
编程语言 时间:
2017-10-05 17:18:52
阅读次数:
224
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k. Example 1: Note: 题目标签:Ar ...
分类:
编程语言 时间:
2017-10-05 00:51:33
阅读次数:
416
快速排序算法的思想 快速排序算法本质上通过把一个数组划分成俩个子数组,然后递归的调用自己为每一个子数组进行快速排序来实现的,它应用了划分算法和递归思想,具体的划分算法参考http://www.cnblogs.com/iwebkit/p/7623350.html,只要把划分算法弄明白基本快速排序也就明 ...
分类:
编程语言 时间:
2017-10-04 22:58:20
阅读次数:
267
知识储备:dp入门。 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了。 洛谷P1880 石子合并 分析:曾经的noi系列。石子合并问题分好几种情况。 这题是环形的,且只能合并相邻的两堆,那么我们把石子数组展开,如[1,2,3,4,5] -> [1,2,3,4,5,1,2,3,4,5],这样 ...
分类:
其他好文 时间:
2017-10-04 21:13:25
阅读次数:
176
这道题给了我们一个二进制的数组,让我们找邻近的子数组使其0和1的个数相等。对于求子数组的问题,我们需要时刻记着求累积和是一种很犀利的工具,但是这里怎么将子数组的和跟0和1的个数之间产生联系呢?我们需要用到一个trick,遇到1就加1,遇到0,就减1,这样如果某个子数组和为0,就说明0和1的个数相等, ...
分类:
其他好文 时间:
2017-09-30 00:30:55
阅读次数:
99
Given an array with n integers, you need to find if there are triplets (i, j, k) which satisfies following conditions: where we define that subarray ( ...
分类:
编程语言 时间:
2017-09-27 11:28:47
阅读次数:
216
1.求子数组的最大和 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 因为是O(N)的复杂度,因此需采用的DP的思想,记录下当前元素之和(为其最优状态,既最大),将其与目前所得的最大和比较,若大于则更 ...
分类:
编程语言 时间:
2017-09-24 18:21:13
阅读次数:
226