贪心,动态规划的区别

news2024/12/28 3:48:05

题目(力扣53):

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

示例:

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

使用贪心算法:

  1. 贪心找的就是局部最优解,当前“连续和”为负数或零的时候就立马放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
  2. 局部最优的情况下,并记录最大的“连续和”,可以推出全局最优。
 var maxSubArray = function(nums) {
    let result = -Math.pow(10,4)
    let count = 0
    for(let i=0;i<nums.length;i++){
        count += nums[i]
        result = Math.max(count,result)
        //用count来计算,一旦count为负数就立马放弃,寻找下一个子字符串
        count<=0?count=0:''
    }
    return result
};

使用动态规划:

  1. 确定dp数组以及下标的含义
    • dp[i] : 包括下标 i 之前的最大连续子序列之和
  2. 确定状态转化公式
    • dp[i-1]>0 : dp[i] = dp[i-1]+nums[i] 当前面的和大于零时,加进来
    • dp[i-1]<=0 : dp[i] = nums[i] 当前面的和小于等于零是 , 舍弃
  3. dp数组的初始化
    • 由于我们是从前往后遍历,所以需要设置dp[0] = nums[0]
  4. 遍历的顺序
    • 递推公式中dp[i]依赖于dp[i - 1]的状态,需要从前向后遍历。
      在这里插入图片描述
var maxSubArray = function(nums) {
    let dp = []
    dp[0] = nums[0]
    for(let i=1;i<nums.length;i++){
        if(dp[i-1]>0){
            dp[i] = nums[i]+dp[i-1]
        }else{
            dp[i] = nums[i]
        }
    }
    return  dp.sort((a,b)=>a-b).pop()
};

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

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

相关文章

System V 消息队列(一)—— 消息队列相关接口函数(msgget / msgctl)

SystemV方案是在OS内核层面专门为进程间通信设计的一个方案&#xff0c;然后通过系统调用&#xff08;system call&#xff09;给用户提供通信接口。SystemV方案包含三种&#xff1a;共享内存、消息队列、信号量。 和System V 共享内存一样&#xff0c;OS为了管理这些消息队列…

【机器学习实战】对加州住房价格数据集进行数据探索(读书笔记)

1. 数据集描述及获取 数据集下载地址&#xff1a;housing.csv数据集的结构&#xff1a; 其中数据集有10个属性&#xff0c;分别为经度、纬度、housing_median_age、房间总数、卧室总数、人口数、家庭数、收入中位数、房价中位数、ocean_proximity。 2. 对数据集进行探索 2.…

web系统开发中关于企业里各种系统分类

关于企业里各种系统 OA 办公自动化系统 Office Automation &#xff08;将现代化办公和计算机网络功能结合起来的新型办公方式&#xff09; 功能&#xff1a;工作流、知识管理 功能模块&#xff1a;日报、考勤、事项审批等CRM 客户关系管理 Customer Relationship Management&…

C++日期和时间编程小结

C11 的日期和时间编程内容在 C Primer(第五版)这本书并没有介绍&#xff0c;目前网上的文章又大多质量堪忧或者不成系统&#xff0c;故写下这篇文章用作自己的技术沉淀和技术分享&#xff0c;大部分内容来自网上资料&#xff0c;文末也给出了参考链接。 日期和时间库是每个编程…

百度前端二面常考面试题

HTTP分层 第一层&#xff1a;物理层&#xff0c;TCP/IP 里无对应&#xff1b;第二层&#xff1a;数据链路层&#xff0c;对应 TCP/IP 的链接层&#xff1b;第三层&#xff1a;网络层&#xff0c;对应 TCP/IP 的网际层&#xff1b;第四层&#xff1a;传输层&#xff0c;对应 TCP…

编写递归函数,求斐波那契数列第n项

要求&#xff1a;编写递归函数int f(int n)&#xff0c;计算如下公式&#xff1a; 定义main函数输入n&#xff0c;调用f函数进行计算&#xff0c;在main函数中输出计算结果。 【样例输入】 10 【样例输出】 89 主函数&#xff1a; #include<stdio.h> int main() { in…

基于ssm的社区疫情返乡管控系统设计实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

C# 学习之路(类型、存储和变量)

C# 学习之路&#xff08;类型、存储和变量&#xff09; C# 是一组类型声明 如果泛泛的描述 C 和 C 程序源代码的特征&#xff0c;可以说 C 程序是一组函数和数据类型&#xff0c;C 是一组函数和类&#xff0c;而 C# 程序是一组类型的声明。 命名空间是一种将相关的类型声明分组…

mongodb 5.0.14 副本集 安装 单机版 记录

1、下载tgz 连接地址&#xff1a;mongodb 5.0.14下载 2、创建用户 useradd mongouserpasswd mongouser 3、解压tgz wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.14.tgz 4、拆分3个独立的mo…

编程团体赛

目录 1047:编程团体赛 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路: 代码: 时间复杂度: 总结: 题目链接: 1047:编程团体赛 编程团体赛的规则为&#xff1a;每个参赛队由若干队员组成&#xff1b;所有队员独立比赛&a…

Protocol buffe vs Json 为什么还会大量使用Json?

JSON&#xff1a;的最大优点就是可读性好&#xff0c;但是体积大。 Protocol Buffers&#xff1a;最大的特点就是体积小&#xff0c;传输需要带宽小&#xff0c;速度快。但是可读性较差 尽管JSON和Protobuf消息可以互换使用&#xff0c;但这些技术的设计目标不同。JSON代表Ja…

【元胞自动机】格子波尔兹曼模型及其应用研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

我去!Python 不愧是脚本之王,这 23 种命令行用法你全部 get 了吗?

1. 快速打印函数的调用栈 在阅读源码的时候&#xff0c;有时候我们想要看整个程序的调用栈是怎样的&#xff1f; 比较常规的做法是使用全局搜索函数&#xff0c;一层一层往上走&#xff0c;效率非常之低。 而我习惯了使用 pdb 对代码进行调试&#xff0c;在使用pdb时&#x…

vscode环境中配置git

1. 建立project空目录用于存放electron基本环境这个环境中得文件不能加入git项目中否则每次更新文件太大github不支持大于100M得文件上传 2. 使用vscode打开project目录 3.打开终端运行npm install electron 运行完成后会生成electron相关得两个json文件和一个文件夹 4.新建一个…

读取图片输出字符图案:用字符输出足球的图案

用字符输出足球的图案前言功能描述实现思路代码实现1️⃣ 获取像素点的RGB数值2️⃣ 判断每个像素点的RGB值是否符合3️⃣ main方法结果测试前言 世界杯&#xff0c;如火如荼的进行着&#xff0c;作为程序员也参加一下活动&#xff0c;蹭一下世界杯的热度 功能描述 通过读取足球…

跨行新手学习并备考阿里云云计算专业认证ACP大概需要多长时间呢?

先来了解一下阿里云认证&#xff1a; 阿里云认证是基于核心技术及岗位的权威认证&#xff0c; 阿里云针对不同产品类别、用户成长阶段、生态岗位&#xff0c;精心打造不同的认证考试。 个人&#xff1a;证明您在对应技术领域的专业度&#xff0c;能够基于阿里云产品解决实际问…

(附源码)spring boot投票系统 毕业设计 261136

基于springboot投票系统 摘 要 在科学管理机制越来越完善的今天&#xff0c;投票管理者只能依赖手工记录数据,这不仅仅浪费时间&#xff0c;并且对人力也是一种浪费&#xff0c;不能做到随时监控&#xff0c;对数据的准确性和及时性也是一种影响。所以投票非常急需一套既有与时…

Python到底适合什么后端团队和项目?

前言 1、我的Python从业经历 本人从2015年开始基本上都在使用Python语言&#xff0c;主要做扫描器、分布式任务、后台接口、AI、图像和3D点阵处理、数据接收处理等等&#xff0c;也待过几个公司&#xff0c;所在部门基本上也是多种语言的开发小组都有&#xff0c;统计了下如下…

JAVA五子棋手机网络对战游戏的设计与实现(源代码+论文)

五子棋网络对战游戏的设计与实现 论文作者姓名&#xff1a;申请学位专业&#xff1a;申请学位类别&#xff1a;指导教师姓名&#xff08;职称&#xff09;&#xff1a;论文提交日期&#xff1a; 五子棋网络对战游戏的设计与实现 摘 要 在现代社会中,及其它无线设备越来越多的…

铁矿行业BI经营分析框架(四)经营分析

在中国大部分的铁矿企业集团都是有央国企背景的&#xff0c;都是属于一个大集团下的二级集团性企业。所以&#xff0c;首先是需要背上集团下发的经营业绩指标的&#xff0c;这个一定是整个经营管理分析的核心要重点关注。 业绩情况 第一个分析要点就是这家企业集团在整个集团中…