当前位置: 首页 > article >正文

leetcode hot100【LeetCode 53.最大子数组和】java实现

LeetCode 53.最大子数组和

题目描述

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

Java 实现代码

public class Solution {
    public int maxSubArray(int[] nums) {
        int maxSum = nums[0];
        int currentSum = nums[0];
        
        for (int i = 1; i < nums.length; i++) {
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            maxSum = Math.max(maxSum, currentSum);
        }
        return maxSum;
    }
}

解题思路

这道题可以使用动态规划来解决。核心思路是利用一个数组 dp 来存储以每个位置 i 结尾的最大子数组和。

1.状态定义dp[i] 表示以 nums[i] 结尾的最大子数组和。

2.状态转移方程

  • 如果 dp[i-1] > 0,则 dp[i] = dp[i-1] + nums[i]
  • 如果 dp[i-1] <= 0,则 dp[i] = nums[i]

3.优化: 由于 dp[i] 只依赖于 dp[i-1],可以用一个变量 currentSum 来代替 dp 数组,从而将空间复杂度优化为 O(1)。

复杂度分析

  • 时间复杂度: O(n),其中 n 是数组的长度。遍历数组一次即可完成计算。
  • 空间复杂度: O(1),只使用了常量级的额外空间。

http://www.kler.cn/a/406140.html

相关文章:

  • PVE的优化与温度监控(二)—无法识别移动硬盘S.M.A.R.T信息的思考并解决
  • 文件管理 II(文件的物理结构、存储空间管理)
  • 利用 GitHub 和 Hexo 搭建个人博客【保姆教程】
  • 嵌入式中利用QT实现服务器与客户端方法
  • FreeRTOS之vTaskDelete实现分析
  • docker安装zabbix +grafana
  • 金融科技白皮书:2022-2023年度回顾与前瞻
  • 基于docker进行任意项目灵活发布
  • 如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
  • Leetcode 每日一题 11. 盛最多水的容器
  • 贪心算法(1)
  • C# 中的事件和委托:构建响应式应用程序
  • vue2-代理服务器插槽
  • [OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
  • 力扣 LeetCode 530. 二叉搜索树的最小绝对差(Day10:二叉树)
  • 观察者模式和订阅模式
  • 信创时代的数据库之路:2024 Top10 国产数据库迁移与同步指南
  • Excel表查找与引用函数、逻辑函数、财务函数
  • Claude3.5-Sonnet和GPT-4o怎么选(附使用链接)
  • m个数 生成n个数的所有组合 详解
  • 全面前端显示:鹅成熟与否识别
  • 深入理解 HTTP 请求头与请求体
  • PG的并行查询
  • 亲测解决Unpack operator in subscript requires Python 3.11 or newer
  • 本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
  • java基础---反射