Leetcode JAVA刷刷站(53)最大子数组和

news2024/9/22 7:31:23

 一、题目概述

二、思路方向 

       这个问题是一个经典的算法问题,称为“最大子序和”(Maximum Subarray Problem)。解决这个问题的一个高效方法是使用“Kadane's Algorithm”,它只需要遍历数组一次,就能在 O(n) 时间复杂度内找到最大子序和。

三、代码实现 

public class Solution {  
    public int maxSubArray(int[] nums) {  
        if (nums == null || nums.length == 0) {  
            return 0;  
        }  
          
        int maxSoFar = nums[0]; // 迄今为止找到的最大子数组的和  
        int currentMax = nums[0]; // 到目前为止包含最后一个元素的最大子数组的和  
          
        for (int i = 1; i < nums.length; i++) {  
            // 我们想要 currentMax 保留包含 nums[i] 的最大子数组的和  
            // 如果加上 nums[i] 使得 currentMax 更大,则加上它  
            // 否则,我们从头开始,只考虑 nums[i]  
            currentMax = Math.max(nums[i], currentMax + nums[i]);  
              
            // 更新迄今为止找到的最大子数组的和  
            maxSoFar = Math.max(maxSoFar, currentMax);  
        }  
          
        return maxSoFar;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};  
        System.out.println(solution.maxSubArray(nums)); // 输出应为 6  
    }  
}

执行结果: 

四、小结

算法解释

  1. 初始化两个变量 maxSoFar 和 currentMax,两者都初始化为数组的第一个元素 nums[0]maxSoFar 用于记录遍历过程中遇到的最大子数组和,而 currentMax 用于记录包含当前元素的最大子数组和。

  2. 从数组的第二个元素开始遍历,对于每个元素 nums[i],我们更新 currentMax。如果 nums[i] 本身比 currentMax + nums[i] 还要大,说明以 nums[i] 结尾的最大子数组就是 nums[i] 本身,我们重置 currentMax 为 nums[i]。否则,我们将 nums[i] 加到 currentMax 上,以尝试扩展当前的最大子数组。

  3. 在每次更新 currentMax 后,我们都将其与 maxSoFar 进行比较,以更新迄今为止的最大子数组和。

  4. 遍历完成后,maxSoFar 就是我们要求的结果。

 结语 

最坚强的人

并不是能战胜一切的人

而是能承受一切的人

!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟JDBC本质

以记事本形式模拟 编译所有文件,并运行 如果换成Oracle 重新编译并运行 利用反射,但是这种方式,还是需要重新编译 改成Oracle 再次编译 以读取配置文件的方式 编译之后 以后无需再次编译源码 只需要改配置文件 修改配置

如何将网站地图Sitemap提交至百度、谷歌及Bing搜索引擎

原文&#xff1a;如何将网站地图Sitemap提交至百度、谷歌及Bing搜索引擎 - 孔乙己大叔 (rebootvip.com) 在当今高度竞争的互联网环境中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;对于网站的可见性和成功至关重要。网站地图&#xff08;Sitemap&#xff09;&#xff…

新媒体智能化与定制开发 AI 智能名片小程序在工业 4.0 中的作用

摘要&#xff1a;本文探讨了新媒体作为客体所具有的智能以及在工业 4.0 进程中的重要性。分析了人赋予新媒体的四个方面智能&#xff0c;包括感知智能、运算智能、认知智能和智慧行为。同时&#xff0c;结合定制开发 AI 智能名片小程序这一具体案例&#xff0c;阐述了新媒体在工…

【ECMAScript性能优化的技巧与陷阱】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

csrf漏洞(三)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文依靠phpstudy以及dvwa靶场进行操作&#xff0c;具体搭建流程参考&#xff1a;xss漏洞&#xff08;二&#xff0c;xss靶场搭建以及简单利用&#xff09; 前篇…

有头单向链表的函数操作(详细版)

【1】代码展示 #include <stdio.h> #include <stdlib.h> typedef char datatype; // 重定义字符类型 typedef struct node {datatype data; // 数据用来存数据struct node *next; // 指针域用来存下一个节点的地址 } Node_t, *Node_p; // 重定义结构体数据…

5G三防加固平板电脑的特点与应用

随着信息技术的不断发展&#xff0c;5G通信技术也逐渐融入到三防平板电脑中。5G三防加固平板电脑是一种专为恶劣环境和工作场景设计的移动设备。它结合了5G通信技术、三防功能和加固设计&#xff0c;可以为用户带来更加高效、稳定、安全的使用体验。下面&#xff0c;我们来看看…

手把手系列 | 使用Milvus、Llama 3、Ollama、LangChain本地设置RAG应用

随着 Llama、Mistral、Gemma 等开源大语言模型&#xff08;LLM&#xff09;的出现&#xff0c;我们越来越能感受到 LLM 的力量&#xff0c;而本地运行基于 LLM 的 RAG 应用的需求越来越强烈。在将应用推至生产环境前&#xff0c;我们往往都需要先本地运行和测试。 因此&#xf…

[鹏城杯 2022]简单的php

题目源代码 <?phpshow_source(__FILE__); $code $_GET[code]; if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello); }else if(; preg_replace(/[^\s\(\)]?\((?R)?\)/, , $code…

qemu启动iso/vmdk转换为qcow2镜像

安装qemu安装 https://qemu.weilnetz.de/w64/ 下载链接 Rock安装 https://rockylinux.org/zh-CN/download 下载&#xff0c;可以使用360等国产浏览器&#xff0c;可能自带加速功能&#xff0c;我这里使用最小版本 安装后在vmware中启动&#xff0c;无ip解决方案 执行命令 n…

OV SSL证书:增强网站信任与安全的重要保障

随着互联网的快速发展&#xff0c;电子商务、在线金融等行业的繁荣&#xff0c;网络安全问题日益凸显。为了确保用户数据的安全性和传输过程中的加密性&#xff0c;SSL证书&#xff08;Secure Sockets Layer&#xff09;成为了保护网站安全的重要工具。其中&#xff0c;OV SSL证…

跨平台无缝编辑,2024年免费视频剪辑工具全解析

在众多视频剪辑工具中&#xff0c;免费视频剪辑软件凭借其易用性、功能丰富性以及零成本的优势&#xff0c;赢得了广大用户的青睐。今天&#xff0c;就让我们一起盘点那些2024年大家都在用的免费视频剪辑软件&#xff0c;探索它们如何助力我们轻松实现创意梦想。 1.福昕视频剪…

基于springboot的太原学院商铺管理系统--论文pf

TOC springboot486基于springboot的太原学院商铺管理系统--论文pf 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这…

机器人策略学习的Game Changer?伯克利提出Body Transformer

过去几年间&#xff0c;Transformer 架构已经取得了巨大的成功&#xff0c;同时其也衍生出了大量变体&#xff0c;比如擅长处理视觉任务的 Vision Transformer&#xff08;ViT&#xff09;。本文要介绍的 Body Transformer&#xff08;BoT&#xff09; 则是非常适合机器人策略学…

大语言模型 (LLM)是什么_

01.语言模型与大语言模型 2023年&#xff0c;让整个人类最为振奋的AI技术就是ChatGPT。“大语言模型&#xff08;Large Language Model&#xff09;”这个词也随之映入人们的眼帘。ChatGPT让人觉得惊艳之处&#xff0c;能够结合上下文&#xff0c;像人一样有逻辑性地回答问题&…

用Python在Ashare获取金融数据官方文档解读

Ashare&#xff0c;也被写作AKShare&#xff0c;是一个基于Python的开源完全免费的财经数据接口库。它的主要目的是为用户提供股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据的采集、清洗和落地的一整套工具。AKSha…

智慧空调离线语音控制方案:NRK3301芯片的深度解析与应用

随着AI技术的大爆发和智能家居的风潮&#xff0c;语音交互已成为智能家居产品的一项必备技能&#xff0c;在家电、音箱、穿戴设备乃至墙壁开关等贴近生活的产品中应用越来越广泛&#xff0c;智能语音识别是当前最热门的方案之一。 九芯智能顺应家居行业智能语音交互市场需求&a…

平面设计艺术:从基础到精通

平面设计是一门结合视觉艺术与技术技能的学科&#xff0c;旨在通过视觉元素传达信息和美感。本文将为初学者提供一个全面的平面设计入门指南&#xff0c;涵盖基础理论、设计流程和实用技巧。在平面设计中&#xff0c;创意和技术相辅相成。设计师使用强大的平面设计工具&#xf…

【C++】入门篇一

【C】入门篇一 一 .缺省参数1.缺省参数的概念2. 缺省参数分类 二. 函数重载1. 函数重载概念2.函数重载代码举例 三.引用1.引用的概念2. 引用特性3. 常引用4. 使用场景(1). 做参数(2). 做返回值 5. 传值、传引用效率比较6. 引用和指针的区别7.引用和指针的不同点 一 .缺省参数 …

实验十 编写子程序《汇编语言》- 王爽

一. 显示字符串 1. 需求 显示字符串是现实工作中经常要用到的功能&#xff0c;应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口&#xff0c;使用者可以决定显示的位置&#xff08;行、列&#xff09;、内容和颜色。 子程序描述 名称&#xff1a;show_str…