首页 > 其他分享 >最大子数组和

最大子数组和

时间:2023-02-13 15:25:33浏览次数:38  
标签:最大 nums int sum 数组 preSum maxSum

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

子数组 是数组中的一个连续部分。

 

示例 1:

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

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

 

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

贪心算法

遍历数组,创建一个指针,使用preSum记录指针当前位置之前的和,当preSum<0时,丢弃,使用sum记录当前指针处的和,使用maxSum记录最大和。

public int maxSubArray(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        int sum = 0;
        int preSum = 0;
        int maxSum = 0;
        for(int i = 0; i < nums.length; i++){
            if(preSum < 0){
                preSum = 0;
            }
            sum = preSum + nums[i];
            preSum = sum;
            maxSum = maxSum > sum ? maxSum : sum;
        }
        return maxSum;
    }

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

动态规划

若前一个元素>0,则将其加到当前元素上

 public int maxSubArray(int[] nums) {
        int n = nums.length, preSum = 0, maxSum = nums[0];
        for(int x : nums){
            preSum = Math.max(preSum + x, x);
            maxSum = maxSum > preSum ? maxSum : preSum;
        }
        return maxSum;
    }

 

标签:最大,nums,int,sum,数组,preSum,maxSum
From: https://www.cnblogs.com/wzxxhlyl/p/17116471.html

相关文章

  • 找数组中重复的数字
    问题:数组中重复的数字,且数值小于数字size-1方法一:利用hash,遇到重复的数字时就返回classSolution{public:intfindRepeatNumber(vector<int>&nums){......
  • java 有序数组中出现次数超过25%的元素
    有序数组中出现次数超过25%的元素说明给你一个非递减的有序整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的25%。代码for(inti=0,len=......
  • 轮转数组
    轮转数组给定一个整数数组nums,将数组中的元素向右轮转k 个位置,其中 k 是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右......
  • 有序数组的平方
    有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9......
  • 封装函数用于过滤一个数组内重复的元素(数组去重),返回去重之后的数组,js
    //方法一vararr1=[2,4,"a","b","c",1,2,2,5,"a","b"];functionunique(arr){vartempArr=[];for(vari......
  • 禁用vue.js <template>中段落的eslint规则最大行长度
    禁用vue.js<template>中段落的eslint规则最大行长度使用eslint,后配置了extends:[//这个破玩意,好讨厌,配置了这个后,template属性多余2个就开始换行......
  • set实现数组去重
    原理:利用Set的唯一性,先把数组变成set,再转换成数组。第一种数组去重方法(使用Array.from)letarr=[12,43,23,43,68,12];letitem=newSet(arr);console.log(item);/......
  • 二维数组的定义方式有几种
    前言在前几篇文章中,壹哥给大家介绍了Java里的一维数组,涉及到了数组的创建初始化、数组遍历、拷贝、扩容、排序、查找等核心内容,这些内容都是数组中的重点,希望大家要在这些......
  • 前端项目实战64-Object.entries(obj)转换为数组
     letobj={      "color-1":"1",      "color-2":"2",      "color-3":"3",      "geyao-1":"1",     ......
  • 前端项目实战65-数组数据处理
       letobj={      "color-1":"1",      "color-2":"2",      "color-3":"3",      "geyao-1":"1",   ......