• 最大子序和


    此博客链接:https://www.cnblogs.com/ping2yingshi/p/13733903.html

    最大子序和(44min)

    题目链接:https://leetcode-cn.com/problems/maximum-subarray/

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

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4]
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

    题解:

              思路:抽象成数学模型,每个数当前位置的和记为Sum(n),Sum(n)是有前面一个数的和加上当前的数字,即Sum(n)=Sum(n-1)+an;但是这里有一个问题是,求连续子序列和时,如果前面都是负数,只有当前数字是整数,那肯定前面负数的值要去掉。像例题一样,求连续子序列和时,前三个数就去掉了。这里我想到判断前面几个数的子序列和时,如果前面的和是小于0的,那么就把前面的和置为当前值,相当于没有要前面几个数的和。如果前面的和是大于0,但是当前值和前面和的和是小于0的,那么当前的和应该被置为0;

    代码如下:

    class Solution {
        public int maxSubArray(int[] nums) {
            int len=nums.length;
            if(len==1)
            {
                return nums[0];
            }
            int [] sum=new int [len];
            sum[0]=nums[0];
            for(int i=1;i<len;i++)
            {
                if(sum[i-1]<0)
                {
                         sum[i]=nums[i];             
                }
                else{
                    sum[i]=sum[i-1]+nums[i];
                    if(nums[0]<0&&sum[i]<0)
                      sum[i]=0;
                }
            }
            int max=-10000;
            for(int j=0;j<len;j++)
            {
               if(max<sum[j])
               {
                   max=sum[j];
               }
            }
            return max;
    
        }
    }

    这道题做完真开心,以前上课讲过,但是不知道为啥,而且现在一点印象没有,这次是自己想出来,并且想明白的,哈哈。

    出来混总是要还的
  • 相关阅读:
    返回顶部
    C# 对文本文件的几种读写方法
    cocos2dx 锁定30帧设置
    AndroidManifest.xml 屏幕上下反转
    粒子系统主
    CCParticleSystem粒子系统
    精灵的优化
    cocos2dx 菜单按钮回调方法传参 tag传参
    cocos2dx跨平台使用自定义字体
    ios7 Cocos2dx 隐藏状态栏设置
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/13733903.html
Copyright © 2020-2023  润新知