首页 > 编程语言 >LeetCode算法笔记 53. 最大子数组和

LeetCode算法笔记 53. 最大子数组和

时间:2022-10-08 22:36:35浏览次数:47  
标签:nums int max sum 53 算法 数组 println LeetCode

给你一个整数数组 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

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-subarray

import junit.framework.TestCase;
import org.junit.Test;

public class LeetCode01_2 extends TestCase {

    /**
     * 时间复杂度:O(n),只遍历一次数组。
     * 空间复杂度:O(1)。只使用了常数空间。
     */
    public int maxSubArray(int[] nums) {
        int max = Integer.MIN_VALUE;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            if (sum < 0) {
                sum = nums[i];
            } else {
                sum = sum + nums[i];
            }
            max = Math.max(max, sum);
        }
        return max;
    }

    /**
     * 时间复杂度:O(n),其中 n 为 nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
     * 空间复杂度:O(1)。我们只需要常数空间存放若干变量。
     */
    public int maxSubArray2(int[] nums) {
        int max = Integer.MIN_VALUE;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum = Math.max(nums[i], sum + nums[i]);
            max = Math.max(sum, max);
        }
        return max;
    }

    @Test
    public void test() {
        int[] arr1 = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
        int[] arr2 = {1};
        int[] arr3 = {5, 4, -1, 7, 8};
        System.out.println(maxSubArray(arr1));
        System.out.println(maxSubArray(arr2));
        System.out.println(maxSubArray(arr3));
        System.out.println("===============");
        System.out.println(maxSubArray2(arr1));
        System.out.println(maxSubArray2(arr2));
        System.out.println(maxSubArray2(arr3));
    }
}

  

标签:nums,int,max,sum,53,算法,数组,println,LeetCode
From: https://www.cnblogs.com/sueyyyy/p/16770504.html

相关文章

  • LeetCode算法笔记 217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=......
  • ORA-1536: space quota exceeded for tablespace
    Error: ORA1536Text:  spacequotaexceededfortablespace"<name>"-------------------------------------------------------------------------------Cause:......
  • 20 -- 排序算法之基数排序
        举例说明:1、第一轮:按照每个元素的 个 位取出,然后将这个数放在对应的桶(数组)中;在按照这个桶的顺序,放入原来的数组中-->  2、第二轮:按照每个元素的十 ......
  • 03 栈与递归 | 数据结构与算法
    1.栈栈的定义:限定在表尾进行插入和删除操作的线性表空栈:不换任何元素的栈栈顶top:允许插入删除的一端栈的操作(连续设计)置空栈make_null_stack()#definemaxn......
  • SPFA算法思想简述
    首先定义数组\(d_i\)表示起点到\(i\)的距离(除起点外初始化为最大值),并维护一个队列。初始将起点入队,然后每一次取队头\(x\)并且松弛所有与\(x\)相连的边,同时如果能......
  • 最简单的算法- 二分查找
    java代码/***Createdbyfupengon2017/1/11.*/publicclassbinarySearchpublicstaticlongbinarySearch_a(long[]src,intkey){intlo=0;......
  • 【bug】Column count of mysql.user is wrong. Expected 45, found 42. Created with
    问题描述:数据库进行了版本升级(5.5.31->5.7.27),兼容旧数据时报错Columncountofmysql.useriswrong.Expected45,found42.CreatedwithMySQL50531原因分析:错误是由......
  • 小学二年级都能看懂的 KMP算法详解
    介绍先上一道模板题:P3375【模板】KMP字符串匹配(难以想象这只是一道黄题)(而manacher竟然是蓝题)大意就是给你两个字符串,问其中一个在另一个里面出现过几次。至于border什......
  • 2534. 树上计数2
    题目链接2534.树上计数2给定一棵\(N\)个节点的树,节点编号从\(1\)到\(N\),每个节点都有一个整数权值。现在,我们要进行\(M\)次询问,格式为uv,对于每个询问你需要回......
  • 牛客网高频算法题系列-BM17-二分查找-I
    牛客网高频算法题系列-BM17-二分查找-I题目描述请实现无重复数字的升序数组的二分查找给定一个元素升序的、无重复数字的整型数组nums和一个目标值target,写一个函......