美文网首页
面试题42:连续子序列的最大和

面试题42:连续子序列的最大和

作者: 繁星追逐 | 来源:发表于2019-11-12 14:22 被阅读0次

输入一个整型数组,数组里正负数都可能有,数组中的一个或者连续的多个整数组成一个子数组。

  • 求所有子数组的和的最大值,要求时间复杂度为O(n)

思路一:
采用一个比较记录最大和,一个记录当前位置数组之前序列的和。如果前一个和小于0,避让比当前数字开始的子数组和要小,直接从当前位置再开始。
代码如下:

/**
     * 普通累加算法
     * @param array
     * @return
     */
    public static int FindGreatestSumOfSubArray(int[] array) {
        if (array == null || array.length == 0) return 0;
          int curSum = array[0];
          int maxSum = array[0];
          for (int i=1;i<array.length;i++){
              if (curSum < 0) curSum = array[i];
              else {
                  curSum += array[i];
              }
              if (curSum > maxSum) maxSum = curSum;
          }
          return maxSum;
    }

思路二:动态规划
赋初值以后,如果从当前数组第二个开始,每次只取当前和数组位置的累加和与当前数组值中最大的那个
最大和数值每次再取自身与当前数组和最大的一个。
最后返回最大和。

/**
     * 动态规划
     * @param array
     * @return
     */
    public static int FindGreatestSumOfSubArray1(int[] array) {
        if (array == null || array.length == 0) return 0;
        int curSum = array[0];
        int maxSum = array[0];
        for (int i=1;i<array.length;i++){
            curSum = Math.max(curSum+array[i],array[i]);
            maxSum = Math.max(curSum,maxSum);
        }
        return maxSum;
    }

    public static void main(String[] args) {
        int[] a = {6,-3,-2,7,-15,1,2,2};
        System.out.println(FindGreatestSumOfSubArray(a));
        System.out.println(FindGreatestSumOfSubArray1(a));
    }

相关文章

  • 面试题42:连续子序列的最大和

    输入一个整型数组,数组里正负数都可能有,数组中的一个或者连续的多个整数组成一个子数组。 求所有子数组的和的最大值,...

  • 动态规划

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

  • 面试题42:连续子数组的最大和

    题目:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,...

  • 求连续子序列最大和

    给定一个无序数组,求最大的连续子数组的和 解法一: 思路:暴力解法,最大序列肯定以数组中某个数为起点,则依次遍历以...

  • 数组连续子序列最大和

  • 面试题2

    四、数据结构和算法 1、求一串数字序列中的连续子串最大和,比如arr=1 -2 3 -1 2,连续子串最大和就是3...

  • Maximum Sum Subarray 子序列最大和

    Easy, Dynamic Programming 给定序列(至少包含一个数),寻找连续子序列,其拥有最大和。 E...

  • 42 连续子数组的最大和

  • 42:连续子数组的最大和

    题目42:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求...

  • 面试题42:连续子数组的最大和 python

    题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中...

网友评论

      本文标题:面试题42:连续子序列的最大和

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