• LintCode-最大子数组


    题目描述:

      给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

    注意事项

      子数组最少包含一个数

    样例

      给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6

    挑战

      要求时间复杂度为O(n)

    开始的解法:

    暴力破解,从长度为1的子数组开始查找,计算每个子数组的和,找出最大的。

     1 public class Solution {
     2     /**
     3      * @param nums: A list of integers
     4      * @return: A integer indicate the sum of max subarray
     5      */
     6     public int maxSubArray(int[] nums) {
     7         int max = nums[0];
     8         int index = 1;
     9         
    10         while(index <= nums.length){
    11             for(int i=0;i<=nums.length-index;i++){
    12                 int sum = 0;
    13                 for(int j=0;j<index;j++){
    14                     sum += nums[i+j];
    15                 }
    16                 
    17                 if(sum > max){
    18                     max = sum;
    19                 }
    20             }
    21             index++;
    22         }
    23         return max;
    24     }
    25 }

    但是面对大数据量的时候会超时。

    第二种解法,复杂度为O(n),因为是求连续的子数组的和,所以当当前的和为负数时,再加到下一个元素上肯定会减小整体的和,所以把当前和sum直接职位下一个元素,max永远记录最大的sum值。代码如下:

     1 public class Solution {
     2     /**
     3      * @param nums: A list of integers
     4      * @return: A integer indicate the sum of max subarray
     5      */
     6     public int maxSubArray(int[] nums) {
     7         int max = nums[0];
     8         int sum = nums[0];
     9         
    10         for(int i=1;i<nums.length;i++){
    11            
    12             if(sum < 0){
    13                 sum = nums[i];
    14             }else{
    15                 sum += nums[i];
    16             }
    17             
    18             if(sum > max){
    19                 max = sum;
    20             }
    21         }
    22         return max;
    23     }
    24 }
  • 相关阅读:
    Babel:JavaScript编译器
    Webpack:前端资源模块化管理和打包工具
    springboot之RocketMq实现
    spingboot之Java邮件发送
    第一模块总结
    嵌入式面试题(一)
    C/C++练习题(三)
    ToolTip特效 JavaScript 盗取厦门人才网的特效
    C#后台无刷新页面弹出alert方法
    复制表及其只复制表数据的区别
  • 原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5360167.html
Copyright © 2020-2023  润新知