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

leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解,题目我都会给出具体实现代码,如果看不懂的可以后台私信我。

本章目录

  • 1.柠檬水找零
  • 2.将数组和减半的最少操作次数
  • 3.最大数
  • 4.摆动序列
  • 5.最长递增子序列
  • 6.递增的三元子序列
  • 7.最长连续递增序列
  • 8.买卖股票的最佳时机
  • 9.买卖股票的最佳时机II
  • 10.K次取反后最大化的数组和
  • 11.按身高排序
  • 12.优势洗牌

1.柠檬水找零

柠檬水找零
在这里插入图片描述

class Solution {
public:bool lemonadeChange(vector<int>& bills) {int five = 0,ten = 0;for(auto x:bills){if(x==5) five++;else if(x==10){if(five == 0) return false;five--;ten++;}else{if(ten&&five) //贪心{ten--;five--;}else if(five>=3){five -= 3;}else return false;}}return true;}
};

2.将数组和减半的最少操作次数

将数组和减半的最少操作次数
在这里插入图片描述

class Solution {
public:int halveArray(vector<int>& nums) {//贪心+大根堆priority_queue<double> heap;double sum = 0.0;for(auto x:nums){sum += x;heap.push(x);}sum /= 2.0;int count =0;while(sum>0){auto t = heap.top()/2.0;heap.pop();sum -= t;count++;heap.push(t);}return count;}
};

3.最大数

最大数
在这里插入图片描述

class Solution {
public:string largestNumber(vector<int>& nums) {//优化:将整型都转成字符串,通过比较字符串的字典序来比大小vector<string> strs;for(auto x:nums) strs.push_back(to_string(x));sort(strs.begin(),strs.end(),[&](const string& s1,const string& s2){return s1+s2>s2+s1;});string ret;for(auto& s: strs) ret+=s;//处理前导零if(ret[0]=='0') return "0";return ret;}
};

4.摆动序列

摆动序列
在这里插入图片描述

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {//贪心:找极值点,建议大家将nums画成折线图进行观察int n = nums.size();if(n<2) return n;int ret =0,left = 0;for(int i=0;i<n-1;i++){int right = nums[i+1]-nums[i];if(right == 0) continue;if(left*right<=0) ret++; //两边异号left = right;}return ret+1;//最后一个点必要}
};

5.最长递增子序列

最长递增子序列
在这里插入图片描述

class Solution {
public:int lengthOfLIS(vector<int>& nums) {//自己设计一个数组,此数组的每个元素表示存储长度为x的子序列的最后一个元素的最小值int n = nums.size();vector<int> ret;ret.push_back(nums[0]);for(int i=1;i<n;i++){if(nums[i]>ret.back()){ret.push_back(nums[i]);}else{int left = 0,right = ret.size()-1;while(left<right){int mid = (left+right)>>1;if(ret[mid]<nums[i]) left = mid+1;else right = mid;}ret[left] = nums[i];}}return ret.size();}
};

6.递增的三元子序列

递增的三元子序列
在这里插入图片描述

class Solution {
public:bool increasingTriplet(vector<int>& nums) {int a = nums[0],b = INT_MAX;for(int i=1;i<nums.size();i++){if(nums[i]>b) return true;if(nums[i]>a) b = nums[i];else a = nums[i];}return false;}
};

7.最长连续递增序列

最长连续递增序列
在这里插入图片描述

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {//贪心+双指针int ret = 0,n = nums.size();for(int i=0;i<n;){int j = i+1;while(j<n&& nums[j]>nums[j-1]) j++;ret = max(ret,j-i);i = j;//直接在循环中更新下一个起点的位置,体现了贪心}return ret;}
};

8.买卖股票的最佳时机

买卖股票的最佳时机
在这里插入图片描述

class Solution {
public:int maxProfit(vector<int>& prices) {int ret = 0,minElem = INT_MAX;int n = prices.size();for(int i=0;i<n;i++){ret = max(ret,prices[i]-minElem);//先更新结果minElem = min(minElem,prices[i]);//再更新最小值}return ret;}
};

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

买卖股票的最佳时机II述
在这里插入图片描述

class Solution {
public:int maxProfit(vector<int>& prices) {//法一:双指针int ret = 0,n = prices.size();for(int i=0;i<n;i++){int j = i;while(j+1<n && prices[j+1]>prices[j]) j++;ret += prices[j]-prices[i];i = j;}return ret;}
};class Solution {
public:int maxProfit(vector<int>& prices) {//法二:一天一天进行计算int ret = 0,n = prices.size();for(int i=1;i<n;i++){if(prices[i]-prices[i-1]>0) ret += (prices[i]-prices[i-1]);}return ret;}
};

10.K次取反后最大化的数组和

K次取反后最大化的数组和
在这里插入图片描述

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {int m = 0,minElem = INT_MAX,n = nums.size();for(auto x:nums){if(x<0) m++;minElem = min(minElem,abs(x));}int ret = 0;if(m>k){sort(nums.begin(),nums.end());for(int i=0;i<k;i++){ret += -nums[i];}for(int i=k;i<n;i++){ret += nums[i];}}else{for(auto x:nums){ret += abs(x);}if((k-m)%2!=0){ret -= minElem*2;}}return ret;}
};

11.按身高排序

按身高排序
在这里插入图片描述

class Solution {
public:vector<string> sortPeople(vector<string>& names, vector<int>& heights) {//1.创建一个下标数组int n = names.size();vector<int> index(n);for(int i=0;i<n;i++) index[i] = i;//2.对下标数组进行排序sort(index.begin(),index.end(),[&](int i,int j){return heights[i]>heights[j];});//3.输出结果vector<string> ret;for(auto x:index){ret.push_back(names[x]);}return ret;}
};

12.优势洗牌

优势洗牌
在这里插入图片描述

class Solution {
public:vector<int> advantageCount(vector<int>& nums1, vector<int>& nums2) {//此题可以学习对应的策略,积累经验int n = nums1.size();//1.排序sort(nums1.begin(),nums1.end());vector<int> index2(n);for(int i=0;i<n;i++) index2[i] = i;sort(index2.begin(),index2.end(),[&](int i,int j){return nums2[i]<nums2[j];});//2.田忌赛马int left = 0,right = n-1;vector<int> ret(n);for(int i=0;i<n;i++){if(nums1[i]>nums2[index2[left]]) ret[index2[left++]] = nums1[i];else ret[index2[right--]] = nums1[i];}return ret;}
};

相关文章:

leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解&#xff0c;题目我都会给出具体实现代码&#xff0c;如果看不懂的可以后台私信我。 本章目录 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列5.最长递增子序列6.递增的三元子序列7.最长连续递增序列8.买卖股票的最…...

SQL高级:窗口函数

窗口函数,顾名思义,它的操作对象是窗口,即一个小的数据范围,而不是整个结果集。并且它是一个函数,在SQL中使用,所以一定有返回值。 窗口函数是SQL中非常有趣的部分,这一节我们就来学习一下它。 辅助表 方便我们后边的讲解,这里我们要建一张学生成绩表,建表语句如下…...

Excel formulas 使用总结(更新中)

最近在写task assigment的时候学习到的&#xff0c;记录下。 首先它所有需要写赋值formuls都要用 开头 相等赋值 a1 这个就代表这格的数据和a1是一样的。如果希望其他格和它相同的逻辑&#xff0c;可以直接复制该cell或者直接拖动该cell右下角&#xff0c;他会自动进行匹配…...

华为OD机试 - 两个字符串间的最短路径问题(Java JS Python C)

题目描述 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 "ABCABBA",B字符串为 "CBABAC" 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,A) 为水…...

强敌环伺:金融业信息安全威胁分析——钓鱼和恶意软件

门口的敌人&#xff1a;分析对金融服务的攻击 Akamai会定期针对不同行业发布互联网状态报告&#xff08;SOTI&#xff09;&#xff0c;介绍相关领域最新的安全趋势和见解。最新的第8卷第3期报告主要以金融服务业为主&#xff0c;分析了该行业所面临的威胁和Akamai的见解。我们发…...

1月1日起,贵阳市退役军人可以免费乘坐公交地铁

广大退役军人是党和国家的宝贵财富&#xff0c;是新时代中国特色社会主义现代化建设的重要力量。为切实增强退役军人的幸福感与获得感&#xff0c;贵阳市信捷科技有限公司以“心系老兵情怀&#xff0c;热忱服务人民”为服务宗旨&#xff0c;积极响应贵阳市政府号召&#xff0c;…...

网络隔离后,怎样建立高效安全的数据安全交换通道?

数据安全对企业生存发展有着举足轻重的影响&#xff0c;数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失。数据流动才能让其释放价值&#xff0c;想要保护企业核心资产&#xff0c;就要实现数据安全交换。 很多企业为了防止知识产权、商业机密数据泄露&am…...

Python:PyTorch

简介 PyTorch是一个开源的机器学习库&#xff0c;由Facebook的人工智能研究团队&#xff08;FAIR&#xff09;开发&#xff0c;用于应用于机器学习和深度学习的Python程序。PyTorch基于Torch&#xff0c;使用Python语言重新编写&#xff0c;使得它更容易使用和扩展。它支持强大…...

CentOS 5/6/7 基于开源项目制作openssh 9.6p1 rpm包—— 筑梦之路

背景介绍 开源项目地址&#xff1a;https://github.com/boypt/openssh-rpms.git 该项目主要支持了centos 5 、6、7版本&#xff0c;针对使用了比较老的操作系统进行openssh安全加固&#xff0c;还是不错的项目&#xff0c;使用简单、一件制作&#xff0c;欢迎大家去支持作者。…...

python的pandas数据分析处理基础学习

pandas学习 一、 pandas基础 1. 什么是pandas&#xff1f; 一个开源的python类库&#xff1a;用于数据分析、数据处理、数据可视化 高性能容易使用的数据结构容易使用的数据分析工具 很方便和其他类库一起使用&#xff1a; numpy&#xff1a;用于数学计算 scikit-learn&a…...

【Qt-容器类】

Qt编程指南 ■ 顺序容器类■ QList■ QVector■ QLinkedList■ QStack■ QQueue ■ 关联容器类■ QSet■ QMap■ QMultiMap■ QHash■ QMultiHash ■ 顺序容器类 ■ QList QList 比较常用的容器类&#xff0c;以数组列表的形式实现&#xff0c;在前、后添加数据非常快。以下为…...

2023-12-27 语音转文字的whisper应用部署

点击 <C 语言编程核心突破> 快速C语言入门 语音转文字的whisper应用部署 前言一、部署whisper二、部署whisper.cpp总结 前言 要解决问题: 需要一款开源的语音转文字应用, 用于视频自动转换字幕. 想到的思路: openai的whisper以及根据这个模型开发的whisper.cppC应用. …...

MAVLINK生成自定义消息

git clone https://github.com/mavlink/mavlink.gitcd mavlinkgit submodule update --init --recursivepython -m mavgenerate出现以下界面 XML填写自定义xml路径&#xff0c;内容可以参考mavlink/message_definitions/v1.0 Out为输出路径 <?xml version"1.0"…...

【MediaPlayerSource】播放器源内部的音视频sender的创建和使用

来看下声网播放中的sender相关组件设计:MediaPlayerSourceDummy 是一个MediaPlayerSourceImpl ,输入音视频帧到 播放器。player_worker_ 线程触发所有操作,由外部传递,与其他组件公用 MediaPlayerSourceDummy(base::IAgoraService* agora_service, utils::worker_type play…...

【机器学习】西瓜书第6章支持向量机课后习题6.1参考答案

【机器学习】西瓜书学习心得及课后习题参考答案—第6章支持向量机 1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。 首先&#xff0c;直观解释二维空间内点到直线的距离&#xff1a; 由平面向量的有关知识&#xff0c;可得&#xff1a; 超平面的法向量为 w w w&am…...

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 强化学习介绍离散场景&#xff0c;使用行为价值方法连续场景&#xff0c;使用概率分布方法实时反馈连续场景&#xff1a;使用概率分布 行为价值方法 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-L…...

Vue axios Post请求 403 解决之道

前言&#xff1a; 刚开始请求的时候报 CORS 错误&#xff0c;通过前端项目配置后算是解决了&#xff0c;然后&#xff0c;又开始了新的报错 403 ERR_BAD_REQUEST。但是 GET 请求是正常的。 后端的 Controller 接口代码如下&#xff1a; PostMapping(value "/login2&qu…...

【Leetcode】重排链表、旋转链表、反转链表||

目录 &#x1f4a1;重排链表 题目描述 方法一&#xff1a; 方法二&#xff1a; &#x1f4a1;旋转链表 题目描述 方法&#xff1a; &#x1f4a1;反转链表|| 题目描述 方法&#xff1a; &#x1f4a1;总结 &#x1f4a1;重排链表 题目描述 给定一个单链表 L 的头节…...

RabbitMQ 报错:Failed to declare queue(s):[QD, QA, QB]

实在没想到会犯这种低级错误。 回顾整理一下吧&#xff1a; 原因&#xff1a;SpringBoot主配置类默认只会扫描自己所在的包及其子包下面的组件。其他位置的配置不会被扫描。 如果非要使用其他位置&#xff0c;就需要在启动类上面指定新的扫描位置。注意新的扫描位置会覆盖默…...

Neo4j 5建库

Neo4j 只有企业版可以运行多个库&#xff0c;社区版无法创建多个库&#xff0c;一个实例只能运行一个库&#xff1b; 如果业务需要使用多个库怎么办呢&#xff1f; 就是在一个机器上部署多个实例&#xff0c;每个实例单独一个库名 这个库的名字我们可以自己定义&#xff1b; …...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...