题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18。
分类:
编程语言 时间:
2015-09-13 13:18:57
阅读次数:
276
大家可以看从Thinking in Java中摘出来的代码理解一下,甚至。多维数组的子数组无须等长//: MultiDimArray.java// Creating multidimensional arrays.import java.util.*;public class MultiDimArr...
分类:
编程语言 时间:
2015-09-10 17:20:17
阅读次数:
176
//计算数组中任何连续子数组的最大和,并打印最大子数组(求开始和结束下标)
//思路:1:当数组元素全为0时,输出最大的那个负数
//??????2:当数组有正有负时,i=0遍历数组,从大于0的那个元素开始,记录此...
分类:
编程语言 时间:
2015-09-09 13:35:43
阅读次数:
182
归并排序给我的感觉:编程一定要认真,不然就算你能想通也要纠缠你很长时间(1)本质: 1.分解:用二分法,每次将数组分成两个元素数量相同或者差一个(奇数)的子数组,然后递归直到将子数组分成一个一个的元素,实际数组不用分,你直接将它看成已经分好的元素 2.合并:将len=1的数组合并成len...
分类:
编程语言 时间:
2015-09-07 12:37:53
阅读次数:
162
快速排序快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立的排序。快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。在归并排序中,递归调用发生在处理整个...
分类:
编程语言 时间:
2015-09-06 16:14:51
阅读次数:
314
归并排序归并排序基本的操作是合并两个已排序的数组,如下面的例子:A:{1,2,4,7}B:{2,2,5,9}第一步:比较A[0]和B[0],A[0] mid) a[k] = b[j++]; //第二个有序子数组已经遍历完 el...
分类:
编程语言 时间:
2015-09-05 15:01:05
阅读次数:
256
给出一数组a,求最大子数组乘积
算法思路:用动态垃规划.用maxValue(n)表示从0到n的最大子数组乘积,minValue(n)表示从0到n的最小子数组乘积。
状态转移方程为:
minValue(n)= min{minValue(n-1)*a[n], maxValue(n-1)*a[n], a[n]}
maxValue(n)=max{minValue(n-1)*a[n], maxVal...
分类:
编程语言 时间:
2015-09-05 12:33:45
阅读次数:
312
给出一个数组,求其最大子数组和(要求最少取一个元素)
主要是用动态规划法,用dp(n)表示从0到n之间的最大子数组和。其状态转移方程为dp(n)=dp(n-1)
代码如下:
class Solution {
public:
int maxSubArray(vector& nums)
{
int res = numeric_limits::min();
int sum = 0;
...
分类:
其他好文 时间:
2015-09-04 12:38:44
阅读次数:
206
题目来源:《剑指offer》面试题31、《编程之美》2.14 题目:输入一个整形数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的和的最大值 解法一:假设id代表自序列的一个起点,j代表终点。如果a[i]是负的,那么它不可能代表最优子序列的起点,因为任何包含a...
分类:
编程语言 时间:
2015-09-03 23:14:50
阅读次数:
214
标题来源:编程之美2.18有一个无序的,元素个数为2n的正整数的数组,要求:怎样能把这个数组切割为元素个数为n的两个数组,使得两个子数组的和尽量接近。解析:由于两个子数组的和是一定的,等于整个数组的和。如今要求使得两个字数组的和尽量的接近,也就意味着要从当中选出n个数使得这n个数的和尽可能的接近su...
分类:
编程语言 时间:
2015-09-01 21:35:14
阅读次数:
176