• leetcode第53题最大子数和


    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-subarray
    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    示例:

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

    思路:找到一个具有最大和的连续子数组肯定需要遍历整个数组 如果出现了负数那么肯定中途会有减小的可能 那么我们必须要用一个变量去存储这个最大值 每次遍历一个元素的时候我们都需要对这个数进行更新

    遍历整个数组 当前sum值小于等于0时 那么证明前面的子数组的和对后面的数没有增加的效果 那么就对sum值进行更新 更新为当前数组中的值 否则 更新sum值为前面的子数组的和的值加上当前值 每遍历一个数
    都要对整个数组中的最大连续子数组的和的值进行更新 即更新great_sum 一次遍历结束后 那么则找到最大值

    public class MaxSubArrayDemo53 {
    public static int maxSubArray(int[] nums){
    int sum = 0;//用来保存当前的连续数组和的最大值
    int great_sum = Integer.MIN_VALUE;//用来保存整个数组的最大连续子数组和的值
    for(int val:nums){
    if(sum<=0){//求当前连续数组的最大值 如果是小于等于0 那么前面的部分对后面的部分没有增加的作用 故进行舍弃
    sum=val;
    }else{
    sum+=val;
    }
    //每遍历一个数 那么我们都需要最大值 进行更新
    great_sum = Math.max(sum, great_sum);
    }
    return great_sum;
    }
    //测试
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String str = scanner.next().toString();
    String[] str1 = str.split(",");
    int len = str1.length;
    int[] nums = new int[len];
    for(int i=0; i<len; i++){
    nums[i] = Integer.parseInt(str1[i]);
    }
    int res = maxSubArray(nums);
    System.out.println(res);
    }
    }

  • 相关阅读:
    常用的知识点
    2021年度“新时代好少年”
    音频格式TDM
    DTS
    学习总结之EXTJS相关了解和问题解决篇
    java中extends和implements的区别
    开发
    程序员练级(转自酷壳)
    优秀程序员无它善假于物也
    EXTJS开发过程遇到的一些问题的小结(转自麦田守望者)
  • 原文地址:https://www.cnblogs.com/phantom576/p/11683288.html
Copyright © 2020-2023  润新知