【算法刷题 | 贪心算法03】4.25(最大子数组和、买卖股票的最佳时机|| )

在这里插入图片描述

文章目录

  • 4.最大子数组和
    • 4.1题目
    • 4.2解法一:暴力
      • 4.2.1暴力思路
      • 4.2.2代码实现
    • 4.3解法二:贪心
      • 4.3.1贪心思路
      • 4.3.2代码实现
  • 5.买卖股票的最佳时机||
    • 5.1题目
    • 5.2解法:贪心
      • 5.2.1贪心思路
      • 5.2.2代码实现

4.最大子数组和

4.1题目

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

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

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

4.2解法一:暴力

4.2.1暴力思路

  • 两层for循环,第一层为起点,第二层为终点
  • 注意:该方法只能算数组任意一个元素到数组末尾的最大值,不能指派到任意一个终点

4.2.2代码实现

	public int maxSubArray(int[] nums) {int res=Integer.MIN_VALUE;for(int i=0;i<nums.length;i++){int sum=0;for(int j=i;j<nums.length;j++){sum+=nums[j];}res=Math.max(res,sum);}return res;}
  • 注意:

image-20240425192417808

4.3解法二:贪心

4.3.1贪心思路

  • 贪心贪在哪里:如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方!
  • 局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
  • 全局最优:选取最大“连续和”

4.3.2代码实现

	public int maxSubArray(int[] nums) {int res=Integer.MIN_VALUE;  //全局最大连续和int count=0;                //局部最大连续和for(int i=0;i<nums.length;i++){//先加上此数count+=nums[i];if(count>res){//更新全局最优解res=count;}//若局部最大连续和为负数,则重置为0,代表从下一位开始计算if(count<0){count=0;}}return res;}

5.买卖股票的最佳时机||

5.1题目

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润

  • 示例一:
输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。总利润为 4 + 3 = 7 。
  • 示例二:
输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。总利润为 4 。

5.2解法:贪心

5.2.1贪心思路

  • 平常思想:选一个低的买入,再选个高的卖,再选一个低的买入…循环反复
  • 但是最终利润是可以分解的
  • 例如:
    • 假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。
    • 相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。
    • 此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!

image-20240425194552498

最终的利润:4+5+3=12

从图中可以发现,其实我们需要收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间

5.2.2代码实现

	public int maxProfit(int[] prices) {int res=0;//从第二天开始for(int i=1;i<prices.length;i++){//利润取正整数res+=Math.max(prices[i]-prices[i-1],0);}return res;}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB】将多个图像输出到单个图形窗口上:使用 subplot 函数创建子图

引言 subplot是MATLAB中的一个函数&#xff0c;它用于在单个图形窗口中创建多个子图。这对于同时显示多个图形或图像非常有用。 语法详解 基本语法&#xff1a; subplot(m, n, p)参数详解&#xff1a; m 指定图形窗口应该分割成多少行n 指定图形窗口应该分割成多少列p 指定…

36.WEB渗透测试-信息收集-企业信息收集(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;35.WEB渗透测试-信息收集-企业信息收集&#xff08;2&#xff09; 重要信息收集&#xf…

好的猫咪主食冻干到底该咋选?品控稳定的主食冻干推荐

315中国之声报道的河北省邢台市南和区某宠粮代工厂的“行业潜规则”&#xff0c;给各位铲屎官拉响了警钟。配料表上写的鸡肉含量为52%&#xff0c;新鲜鸡小胸含量为20%&#xff0c;所谓的鲜鸡肉其实就是鸡肉粉。本来养宠物是为了让自己身心愉悦&#xff0c;但这样的行业乱象弄得…

Python-VBA函数之旅-len函数

目录 一、len函数的常见应用场景&#xff1a; 二、len函数使用注意事项&#xff1a; 三、如何用好len函数&#xff1f; 1、len函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、…

python项目练习-1

获取无忧书城的小说内容&#xff01; import requests # 导入请求包 from lxml import etree # 导入处理xml数据包url https://www.51shucheng.net/wangluo/douluodalu/21750.html book_num 1 # 文章页数 download_urls [] # 定义一个空列表&#xff0c;表示我们下载过小…

DSNeRF复现流程

创建虚拟环境安装依赖 conda create -n DSNeRF python3.7pip install -r requirements.txt下载LLFF数据放在创建的data文件下 https://drive.google.com/file/d/1RjhfcbsywOvw0ts1AFSri91mKANvEVOa/view?uspsharing 下载预先训练好的模型 bash download_models.sh渲染视频…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁&#xff0c;就是双指针遍历&#xff0c;然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路&#xff0c;直接把所有…

【产品经理修炼之道】- 需求挖掘之手机话费充值

画原型图从来就不是面试考察的重点&#xff0c;分析、解决问题才是产品经理的核心能力。那么该如何积累产品经验呢&#xff1f;本文以以「手机话费充值」为案例&#xff0c;分享整个设计流程和思路&#xff0c;希望对你有所启发。 不少产品新人有个误区&#xff1a;产品经理的日…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

Gitflow实操以及代码审查Pull Request操作

1.背景 之前一直有用过gitflow&#xff0c;但是一直没有归纳技术&#xff0c;另一方面也是每个团队用到的gitflow都不一致。而最近做项目要用gitflow&#xff0c;趁此机会分享一下gitflow的操作。 2.gitflow介绍 用git一直有一个问题&#xff0c;就是怎么保证代码稳定性&…

电容随频率变化测量数据

Y电容随频率变化测量数据&#xff0c;使用LCR仪器分别对15nf&#xff0c;330nf和22nf进行测量&#xff0c;具体数据如下