Day31代码随想录(1刷) 贪心

122. 买卖股票的最佳时机 II

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

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

返回 你能获得的 最大 利润 。

示例 1:

输入: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 。

示例 2:

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

示例 3:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。

提示:

  • 1 <= prices.length <= 3 * 104
  • 0 <= prices[i] <= 104

状态:完成,我的代码太蠢了

思路:看carl的代码恍然大悟了,一开始我就想着跟上一题一样求谷值峰值然后把两个减法,其实可以不用这样子,可以把利润拆分,只要前后两天的利润是正的说明就在赚钱了,局部的最佳这题就是全局的最佳。

蠢代码:

class Solution {public int maxProfit(int[] prices) {int maxBouns=0;Stack<Integer> stack=new Stack<>();int type=-1;stack.add(prices[0]);for(int i=1;i<prices.length;i++){if(type<0){if(stack.peek()>prices[i]){stack.pop();stack.add(prices[i]);}else{type=1;stack.add(prices[i]);}}else{if(stack.peek()<prices[i]){stack.pop();stack.add(prices[i]);}else{type=-1;stack.add(prices[i]);}}}if(type==-1){stack.pop();}int size=stack.size();for(int i=0;i<size/2;i++){int max=stack.pop(); int min=stack.pop();maxBouns+=max-min;}return maxBouns;}
}

 帅气代码:

class Solution {public int maxProfit(int[] prices) {int maxBouns=0;for(int i=1;i<prices.length;i++){maxBouns+=Math.max(prices[i]-prices[i-1],0);}return maxBouns;}
}

 55. 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 105

状态:完成

思路:该题关键就是看目前最多能覆盖到哪里,他最多能覆盖到哪里我们就只能走到哪里。 

class Solution {public boolean canJump(int[] nums) {if(nums.length==1) return true;int max=0;for(int i=0;i<=max;i++){nums[i]=nums[i]+i;max=Math.max(nums[i],max);if(nums[i]>=nums.length-1) return true;}return false;}
}

 45. 跳跃游戏 II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i] 
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

状态:没做出来,看了之前的笔记做出来了

该题我使用贪心算法去做,我先做了55跳跃游戏,再做这个跳跃游戏二。这两题看上去可能差不多,其实差别挺大的我感觉,一个是判断能不能跳到,就只要知道他的最大覆盖范围是不是大于或等于这个数组的长度就行了,这个45题前提是肯定能跳到,求跳到最后一格的最短跳跃次数。

要求跳的最短次数,所以贪心的策略就是跳最大的距离。跳跃次数增加的前提就是,节点移动到了上一个最大的覆盖距离。为什么呢?

我们一步一步地移动节点,在第一步的时候一步一步地可以求出这一步的最大覆盖距离,到了上一步最大覆盖距离的点的时候,还没有走完,所以步数要加一,然后就要看看这一步最多可以移动到哪里,如果可以覆盖整个数组则不用继续循环了,因为在这一步的循环中就可以到最后。

太巧妙了贪心。

class Solution {public int jump(int[] nums) {if(nums.length==1) return 0;int max=0;int preMax=0;int count=0;for(int i=0;i<=max;i++){max=Math.max(max,nums[i]+i);if(i==preMax){count++;preMax=max;if(max>=nums.length-1) return count;}}return count;}
}

 感想:贪心已经过半,准备迎接动态规划🤭。

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

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

相关文章

WPF OnStartup

在Windows Presentation Foundation (WPF)框架中&#xff0c;OnStartup 是 System.Windows.Application 类的一个受保护的虚方法&#xff0c;它是应用程序启动过程中的一个重要环节。当一个 WPF 应用程序启动时&#xff0c;其入口点通常是 App.xaml 文件和对应的后台代码文件 A…

springcloud基本使用三(搭建nacos)

window下安装nacos: 下载页面:Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Releases alibaba/nacoshttps://github.com/alibaba/nacos/releases…

基于卷积神经网络的中药识别(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

原作者链接&#xff1a;基于卷积神经网络的中药识别&#xff08;pytorch框架&#xff09;【python源码UI界面前端界面功能源码详解】_识别中药python-CSDN博客 //gitcode,gitee,飞桨&#xff0c;csdn&#xff0c;bilibili。几个有用网站&#xff0c;直接搜索即可&#xff0c;平…

主干网络篇 | YOLOv5/v7 更换骨干网络之 HGNetv2 | 百度新一代超强主干网络

本改进已融入到 YOLOv5-Magic 框架。 论文地址:https://arxiv.org/abs/2304.08069 代码地址:https://github.com/PaddlePaddle/PaddleDetection 中文翻译:https://blog.csdn.net/weixin_43694096/article/details/131353118 文章目录 HGNetv2网络结构1.1 主干网络1.2 颈部…

关于阿里云中RDS数据库的CPU使用率和内存使用率的20道面试题

1. 什么是RDS数据库&#xff1f; RDS数据库&#xff0c;全称为关系型数据库服务&#xff08;Relational Database Service&#xff09;&#xff0c;是一种在云端运行的在线数据库服务。 它基于阿里云飞天分布式操作系统和全SSD盘高性能存储构建&#xff0c;旨在为用户提供稳定…

【Android】毫无耦合性,一个Item根布局搞定 item侧滑删除菜单,像IOS那样简单的使用侧滑删除。(1)

自定义ViewGroup实现侧滑删除简单&#xff0c;难得是还要同时 处理多指滑动的屏蔽&#xff0c;防止两个侧滑菜单同时出现&#xff0c;等等&#xff0c; 有办法将这些东西都用一个ViewGroup搞定么&#xff1f; 看本文如何巧用static类变量来解决这些矛盾冲突。 【2 预览】 那…

真快乐APP抢购源码实现

支持多个平台的自动 滑动验证码、选字验证码。缺点就是需要自己找一个验证码识别服务器,可以自己用python写一个,或者使用超级鹰(本篇教程就是使用它) 下面是实现源码 "ui"; Date.prototype.Format = function (fmt) {var o = {"M+": this.getMonth() …

Swift:在 Win10 上开发入门

访问 https://swift.org/download/ 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占2.56GB 官网文档&#xff1a;https://www.swift.org/documentation/ 中文教程&#xff1a;The swift…

2024年做抖音小店商家,最不该忽视的三个运营要点,一定要避开!

大家好&#xff0c;我是电商花花。 每一次平台规则的改变都深深的影响着我们无货源商家&#xff0c;我们只有在规则内行使&#xff0c;遵守规则&#xff0c;才能在安然无恙。 所以我们做抖音小店一定要及时关注平台的规则变化&#xff0c;以及整体的做店趋势。 只有这样才不…

Qt Remote Objects (QtRO) 笔记

简介 Qt Remote Objects (QtRO) 是 Qt 的一个进程间通信模块。 术语 Source 是指提供服务或提供功能供其他程序使用的对象&#xff0c;是 RPC 中的被调用端。 Replica 是指 Source 对象的代理对象&#xff0c;用于 RPC 中的调用端&#xff0c;对 Replica 的调用请求将被转发…

App.vue触发axios报错及解决方案

App.vue触发axios报错及解决方案 修改根目录下vue.config.js文件 module.exports {publicPath: ./,assetsDir: assets,configureWebpack: {devServer: {client: {overlay: false}}} }重新npm run dev 搞定

十个排序算法

目录 冒泡排序(Bubble Sort) 选择排序(Select Sort) 插入排序&#xff08;InsertSort&#xff09; 希尔排序&#xff08;ShellSort&#xff09; 计数排序&#xff08;CountSort&#xff09; 快速排序&#xff08;QuickSort&#xff09; 归并排序&#xff08;Merge Sort&a…

双击返回键,轻松处理 WebView 中的后退事件

引言 在移动应用开发中&#xff0c;WebView 组件因其能够展示网页内容的能力而变得日益重要。它允许开发者在应用内部直接嵌入网页&#xff0c;无需离开应用即可查看和交互丰富的网络信息和媒体内容。WebView 的普及&#xff0c;使得用户可以在一个统一的环境中流畅地使用应用…

树状数组模板

单点更新 区间查询 使用树状数组维护原数组即可 public class Test01 {static final int N 10010;static int[] c new int[N];static int n;public static void main(String[] args) {Scanner in new Scanner(System.in);n in.nextInt();for (int i 1; i < n; i) {in…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

scoped原理及使用

一、什么是scoped&#xff0c;为什么要用 在vue文件中的style标签上&#xff0c;有一个特殊的属性&#xff1a;scoped。 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。…

重构智能防丢产品,苹果Find My技术引领市场发展

目前市场上最主要的防丢技术是蓝牙防丢和GPS防丢&#xff0c;蓝牙防丢是通过感应防丢器与绑定手机的距离来实现防丢的。一般防丢会默认设置一个最远安全距离&#xff0c;超过这个安全距离后&#xff0c;与手机蓝牙信号断开&#xff0c;触发防丢报警&#xff0c;用户根据防丢报警…

高可用系列特殊场景:第三方限时唯一访问令牌

一、业务特点 很多第三方服务&#xff0c;都使用访问令牌来做访问验证&#xff0c;比如某度、某信的access token&#xff0c;主要特征如下&#xff1a; 1、令牌由第三方系统发放&#xff0c;用于访问第三方特定资源&#xff1b; 2、令牌存在有效期限&#xff0c;过期自动失…

学习java第三十三天

Spring 官网列出的 Spring 的 6 个特征: 核心技术 &#xff1a;依赖注入(DI)&#xff0c;AOP&#xff0c;事件(events)&#xff0c;资源&#xff0c;i18n&#xff0c;验证&#xff0c;数据绑定&#xff0c;类型转换&#xff0c;SpEL。 测试 &#xff1a;模拟对象&#xff0c;Te…