• 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 }
  • 相关阅读:
    POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并
    HDU 5992 kd-tree
    BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
    BZOJ 4066 kd-tree 矩形询问求和
    BZOJ 1941 kd-tree
    BZOJ 2648 kd-tree模板
    HDU 5925 离散化
    php trait
    php命名空间
    js
  • 原文地址:https://www.cnblogs.com/xiaocainiao2hao/p/5360167.html
Copyright © 2020-2023  润新知