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

LeetCode hot100---贪心算法专题(C++语言)

贪心算法

当前取最优,最终完成全局最优

1、买卖股票的最佳时机

(1)题目描述以及输入输出

(1)题目描述:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(2)输入输出描述:
输入:[7,1,5,3,6,4]
输出:5关键思路:
遍历价格
取当前价格和最低价格的最小值
当前价格-最低价格,取最大

(2)代码块

class Solution {
public:int maxProfit(vector<int>& prices) {int cost = INT_MAX; // 取当前价格和最低价格的最小值int profit = 0;     // 当前价格-最低价格,取最大for(int price:prices){cost = min(cost,price);profit = max(profit,price-cost);}return profit;}
};

2、跳跃游戏

(1)题目描述以及输入输出

(1)题目描述:
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false(2)输入输出描述:
输入:nums = [2,3,1,1,4]
输出:true关键思路:
遍历数组
当前距离超过最大可达距离,不合理
计算从当前可达的最大距离

(2)代码块

class Solution {
public:bool canJump(vector<int>& nums) {int max_jump = 0;for(int i = 0;i<nums.size();++i){if(i>max_jump)return false;     // 当前距离超过最大可达距离,不合理max_jump = (max_jump,i+nums[i]);// 计算从当前可达的最大距离}return true;}
};

3、跳跃游戏||

(1)题目描述以及输入输出

(1)题目描述:
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0](2)输入输出描述:
输入: nums = [2,3,1,1,4]
输出: 2关键思路:
遍历数组
计算从当前可达的最大距离
到达上次最远可达距离时更新接下来的最大可达距离并且更新跳跃步数

(2)代码块

class Solution {
public:int jump(vector<int>& nums) {int maxpos = 0;         // 记录当前最远可达位置int end = 0;            // 记录上次跳跃末端int num = 0;            // 记录跳跃步数for(int i = 0;i<nums.size()-1;++i){maxpos = max(maxpos,nums[i]+i); // 当前走过的最大可达距离if(i == end)        // 到达上次跳跃的最远距离,需要下次跳跃{end = maxpos;num++;}}return num;}
};

4、划分字母区间

(1)题目描述以及输入输出

(1)题目描述:
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。
返回一个表示每个字符串片段的长度的列表。(2)输入输出描述:
输入:s = "ababcbacadefegdehijhklij"
输出:[9,7,8]关键思路:
定义哈希数组记录元素最远出现位置
遍历字符,在哈希表中查找字符出现的最远位置,假如到最远位置

(2)代码块

class Solution {
public:vector<int> partitionLabels(string s) {vector<int> result;int record[26] = {0};for(int i = 0;i<s.size();i++){record[s[i]-'a'] = i;          // 记录该字母出现的最后位置}int left = 0,right = 0;for(int i = 0;i<s.size();++i){right = max(right,record[s[i] - 'a']);	// 更新当前遍历的最远可达距离if(i == right)          // 到达当前位置的最右边界{result.push_back(right - left + 1);left = i + 1;}}return result;} 
};
http://www.lryc.cn/news/454748.html

相关文章:

  • 《PyTorch深度学习快速入门教程》学习笔记(第15周)
  • kubeadm部署k8s1.28.0主从集群(cri-dockerd)
  • C语言复习概要(四)
  • 【楚怡杯】职业院校技能大赛 “Python程序开发”数据清洗练习
  • 重学SpringBoot3-集成Redis(五)之布隆过滤器
  • BGP路由原理详解
  • Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)
  • AI股市预测的可参考价值有几何?
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第02套
  • 2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1
  • 毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)
  • 电子信息类专业技术学习及比赛路线总结(大一到大三)
  • 怎么将bash(sh)的所有输出保存到log/txt中?
  • 腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案
  • 如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具
  • 深度学习:CycleGAN图像风格迁移转换
  • pytorch和yolo区别
  • 使用树莓派搭建音乐服务器
  • 单链表的分解
  • [OS] 4.Linux 内核
  • flutter_鸿蒙next_Dart基础③函数
  • 基于猎豹优化算法(The Cheetah Optimizer,CO)的多无人机协同三维路径规划(提供MATLAB代码)
  • Linux:进程的创建、终止和等待
  • 数值优化基础——基于优化的规划算法
  • 括号匹配——(栈实现)
  • 【Java 并发编程】初识多线程
  • Linux下载安装MySQL8.4
  • 强化学习笔记之【DDPG算法】
  • c++继承(下)
  • 数据结构 ——— 单链表oj题:反转链表