美文网首页
leetcode#53 最大子序和

leetcode#53 最大子序和

作者: leeehao | 来源:发表于2020-07-16 14:39 被阅读0次

    题目

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    审题

    找到数组内连续的下标 相加最大值

    第一次

    暴力搜索,累加所有可能,计算最大值。

    class Solution {
        public int maxSubArray(int[] nums) {
            if (nums == null || nums.length == 0) return 0;
            int max = num[0];  // 必须初始化,防止负数
            for (int i = 0; i < nums.length; i++) {
                int sum = nums[i];
                if (sum > max) {
                        max = sum;
                }
                for (int j = i + 1; j < nums.length; j++) {
                    sum+=nums[j]
                    max = sum > max ? sum : max;
                }
            }
          return max;
        }
    }
    

    第二次

    最大子序和这道题重在思考,怎么才能一次遍历就出结果。从数字序列中观察可以发现,如果遇到正整数情况可以一直进行累加并比较最大值。

    public class Solution {
        public int maxSubArray(int[] nums) {
              if (nums == null || nums.length == 0) return 0;
              // 注意不能初始化为 0 
              int max = nums[0];
              int sum = 0;
              for (int n : nums) {
                     // 无视 n == 0 情况
                     if (sum > 0) {
                          sum += n;
                     } else {
                          // 重置 sum,继续寻找下一个正整数
                          sum = n;
                     }
                     max = Math.max(sum, max);
              }
              return max;
        }
    }
    

    相关文章

      网友评论

          本文标题:leetcode#53 最大子序和

          本文链接:https://www.haomeiwen.com/subject/repphktx.html