原文:http://blog.csdn.net/left_la/article/details/8206405快速排序的三个步骤:1、分解:将数组A[l...r]划分成两个(可能空)子数组A[l...p-1]和A[p+1...r],使得A[l...p-1]中的每个元素都小于等于A(p),而且,小于等...
分类:
编程语言 时间:
2015-06-13 12:46:21
阅读次数:
133
今天看了曹博的动态规划视频,发现又有一种新的解法。
算一个前缀和,presum[], 这是常有的空间优化时间,计算一个子数组和的常有方法
然后维护一个sum[0...i-1]的最小值,然后和sum[i]减,就是以a[i-1]为尾元素的子数组和的最大值
时间ON,空间O1
class Solution {
public:
int maxSubA...
分类:
编程语言 时间:
2015-06-12 10:02:31
阅读次数:
216
【归并排序的思想】归并排序的思想是如果子数组L和子数组R都是有序的,那么我们可以将其合并为一个有序数组;在归并排序中,首先将子数组的长度设为1,此时每个元素都是一个有序子数组,通过两两合并,我们可以得到若干个长度为2的有序子数组,然后对这些长度为2的子数组两两合并,就可以得若干个到长度为4的有序子数组……………………如此下去,最终将合并为一个有序的数组。
下面用一个例子来说明:
假设有数组A[]...
分类:
编程语言 时间:
2015-06-10 17:22:51
阅读次数:
109
1 问题:返回一个二维整数数组中最大联通子数组的和2思路:对n*m的二维数组进行分解,分解为n个一维数组,再先求这n个一维数组的最大子数组和,并记下每行最大一维子数组的下标如2-5,这是就会分两种情况第一种是行之间的最大子数组是相连的,如第一行是2-5,第二行是3-6,这是直接相加就行。第二种是不相...
分类:
移动开发 时间:
2015-06-08 23:14:50
阅读次数:
159
首尾相连数组的最大子数组和时间限制:1000ms | 内存限制:65535KB难度:4描述给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0...
分类:
编程语言 时间:
2015-05-30 12:11:48
阅读次数:
162
蚂蚁的难题(二)时间限制:1000 ms | 内存限制:65535 KB 难度:3描述下雨了,下雨了,蚂蚁搬家了。已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈。小蚂蚁对每种食材都有一个喜爱程度值Vi,当然,如果Vi小于0的时候,表示蚂蚁讨厌 这种食材。因为马上就要下雨了,所以蚂蚁只能搬一...
分类:
编程语言 时间:
2015-05-28 15:29:15
阅读次数:
157
与归并排序一样,快速排序使用也使用了分治的思想。下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q-1]和A[q+1,...,r],使得A[p,...,q-1]中每个元素都小于等于A[q],而...
分类:
编程语言 时间:
2015-05-22 21:05:52
阅读次数:
261
第一题:最大子数组和题目描述给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和输入描述第一行一个整数n(1int maxSum(int *a,int n){ int max=-1; int i,j,sum; for(i=0;imax) ...
分类:
编程语言 时间:
2015-05-21 21:51:48
阅读次数:
204
第一题:最大子数组和题目描述给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和输入描述第一行一个整数n(1int maxSum(int *a,int n){ int max=-1; int i,j,sum; for(i=0;imax) ...
分类:
编程语言 时间:
2015-05-21 19:26:30
阅读次数:
2710
给定一个整数数组,找到一个和最接近于零的子数组。返回第一个和最有一个指数。你的代码应该返回满足要求的子数组的起始位置和结束位置
样例
给出[-3, 1, 1, -3, 5],返回[0, 2],[1, 3], [1,
1], [2, 2] 或者[0, 4]
挑战
O(nlogn)的时间复杂度
分析:首先O(n^2)的算法很好想,直接枚举起点就行,看到...
分类:
编程语言 时间:
2015-05-18 12:52:05
阅读次数:
490