思想: 经过分析可得,若子数组和为负数就已经代表这个子数组不可能为最大子数组了,相反若子数组和为正,则将最大的和比较出来便可。 故可直接遍历该数组一旦子数组和已为负数,则置为0,否则与之前的最大值进行比较,得出目前最大值。 上代码: ...
分类:
编程语言 时间:
2017-09-20 14:21:26
阅读次数:
115
一、题目: 这是一道考的烂的不能再烂的题目,但是依然有很多公司乐于将这样的题目作为笔试或面试题,足见其经典。 问题是这样的:一个整数数组中的元素有正有负,在该数组中找出一个连续子数组,要求该连续子数组中各元素的和最大,这个连续子数组便被称作最大连续子数组。比如数组{2,4,-7,5,2,-1,2,- ...
分类:
编程语言 时间:
2017-09-17 23:38:33
阅读次数:
397
题目1014:排名 题目1013:开门人和关门人 不必排序,都转化为秒,记录最大值和最小值的位置,输出即可 题目1012:畅通工程 并查集题目,记得tree数组初始化和判断是否能组成最小生成树的方法,还要记得结点的取值范围是0-n-1,还是1-n 题目1011:最大连续子序列 如果不要求写出最大连续 ...
分类:
其他好文 时间:
2017-09-14 23:28:21
阅读次数:
221
下面介绍一个线性的算法,这个算法是许多聪明算法的典型:运行时间是明显的,但是正确性则很不明显(不容易理解)。 //线性的算法O(N) long maxSubSum4(const vector<int>& a) { long maxSum = 0, thisSum = 0; for (int j = ...
分类:
其他好文 时间:
2017-09-08 23:02:29
阅读次数:
183
2017-09-06 21:32:22 writer:pprp 可以作为一个模板 ...
分类:
其他好文 时间:
2017-09-06 22:06:49
阅读次数:
121
#include <iostream> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <cstdio> using namespace std; #define N 20010 ...
分类:
其他好文 时间:
2017-09-03 13:17:16
阅读次数:
111
【来源】网上流传的2017美团秋招笔试题 【问题描述】 两个测试样例输出都是5 【算法思路】 暴力解法时间会超限,使用一种很巧妙的数学方法。用在读取数组arr时用数组sum记录其前 i 项的和,即 sum[i] = arr[1]+arr[2]+...+arr[i]。利用这一个数学性质:假设前m项之和 ...
分类:
其他好文 时间:
2017-09-01 20:26:52
阅读次数:
131
题意:一个数n,给出n个数,再给一个数k。求能整除k的连续区间和所在区间的最大长度。bc85场1001的升级版。 题解:刚拿到题的时候没看清是连续区间,就瞎想dp。发现连续区间后,想尺取法,发现这道题是离散的,没法尺取,也没法二分。 正解应该是前缀和取模。若(sum[j]-sum[i])%k==0则 ...
分类:
其他好文 时间:
2017-09-01 15:02:26
阅读次数:
193
连续子数组最大和,可考虑publicclassSolution{
publicintmaxSubArray(int[]nums){
intlen=nums.length;
if(nums==null||len==0)return0;
intMAX=nums[0];
intcurSum=nums[0];
for(inti=1;i<len;i++){
if(curSum>0){
curSum+=nums[i];
}else{
curSum=nums[i];
}
MAX=Math..
分类:
编程语言 时间:
2017-09-01 09:53:07
阅读次数:
169
2017-08-27 16:38:47 writer:pprp 最大连续区间和,可以有很多种方法实现,其中最常见的是运用一维前缀和还有动态规划来解决的; 代码如下: ...
分类:
其他好文 时间:
2017-08-28 00:50:00
阅读次数:
153