算法面试题 之 最长连续子序列之和
2015-04-10 17:32
99 查看
参考 http://www.ahathinking.com/archives/120.html
var arr = [2, 8,-2, 3, 5, -3, 2]; //传统方法 O(n^2) function fun1(arr){ var maxSum =arr[0]; var maxSumArr = []; for(var i=0; i< arr.length; i++){ var sum = arr[i]; var sumArr = [arr[i]]; for(j=i+1; j<arr.length; j++){ sum = sum + arr[j]; sumArr.push(arr[j]); if(sum > maxSum){ maxSum = sum; maxSumArr = [].concat(sumArr); } } } console.log(maxSum); console.log(maxSumArr); } fun1(arr); fun2(arr); //复杂度是O(n)的方法 //一开始会觉得奇怪 怎么可能有复杂度是O(N)的方法呢 //仔细想 如果所有的数字都是正数 那么和最大的连续子序列就是数组本身 //所以我们就是要控制sum<0 的情况 function fun2(arr){ var sum = arr[0]; var maxSum = arr[0]; var sumArr = []; var maxSumArr =[]; for(var i =0; i< arr.length; i++ ){ if(sum < 0 && arr[i]>0){ sum = arr[i]; sumArr = [arr[i]]; }else{ sum += arr[i]; sumArr.push(arr[i]); if(sum > maxSum){ maxSum = sum; maxSumArr = [].concat(sumArr); } } } console.log(maxSum); console.log(maxSumArr); }
相关文章推荐
- 一道算法面试题 -- 输出所有和为n连续正数序列
- 算法面试题:如何找最长的增长子序列
- 最长有序(非连续)子序列算法
- 算法面试题 之 最长递增子序列 LIS
- 笔试面试算法经典--最长连续序列
- 最长连续序列(O(n)算法)
- 面试题40:数组中最长的连续序列的长度
- LongestCommonSequence 最长连续公共子序列(算法导论是最长公共子序列)
- Longest Consecutive Sequence (最长连续序列) 【面试算法leetcode】
- 最长连续序列(算法)
- google面试题及我的算法(3)——递归序列
- 算法题17 整数序列是否连续
- 只考加法的面试题——将一个正整数表示成连续的自然数序列之和
- 最长递增子序列 的二分算法
- 算法 : 最长升序降序序列
- 初识动态规划算法,求解最长非递增子序列【DP算法】
- 程序员面试题精选100题(26)-和为n连续正数序列
- 算法:最长升序降序序列(最长降序序列)
- 算法:最长升序降序序列(最长升序序列)
- POJ2479 Maximum sum 最长连续子序列[DP]