zoukankan      html  css  js  c++  java
  • 连续子数组的元素之和最大值

    一个整数数组,找出其中连续子数组的元素之和的最大值:
    直接看代码,思路都在注释中。

    public class FindMaxSubArraySum {
    
        public static void main(String[] args) {
            int[] arr = {-2, -3, 4, -1, -2, 1, 5, -3};
            System.out.println(maxSubArray(arr));
        }
    
        /**
         * 查找连续子数组元素和的最大值能保持复杂度为O(N)的关键在于,
         * 认识到这个子数组在含有正数的情况下,子数组的左右边界元素一定是正数
         * 只需一次循环就能遍历到那个子数组的元素和,然后保留这个值
         * 所以需要对负数的处理技巧,遍历求和时需要将负的值置为0,这样不论是全为负数还是含有正数,还是保留最大值就行
         * 全为正数的情况无需讨论。
         * @param nums int[]
         * @return int
         */
        public static int maxSubArray(int[] nums) {
            // 求最大值就应该用用最小值作为边界,而不是0,因为有很多小于0的整数
            int maxSum = Integer.MIN_VALUE;
            int maxTemp = 0;
            for (int num : nums) {
                maxTemp = maxTemp + num;
                // 保留最大值
                if (maxSum < maxTemp) {
                    maxSum = maxTemp;
                }
                // 如果是负数,那么只需要保留最大值,后续无需再加上更小的负数
                if (maxTemp < 0) {
                    maxTemp = 0;
                }
            }
            return maxSum;
        }
    }
    

    方法来源:
    https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/

    至此,若有纰漏,望各位不吝赐教

  • 相关阅读:
    Tensorflow结点打包和依赖控制
    理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer
    scipy稀疏矩阵
    最佳阈值划分问题
    hihocoder217周 树形DP
    linux免密码登录
    我说
    Linux查看GPU使用情况
    Java交替打印两个字符串
    2018摩拜算法工程师笔试题
  • 原文地址:https://www.cnblogs.com/0nePlece/p/15059803.html
Copyright © 2011-2022 走看看