【贪心算法】day2

📝前言说明:

  • 本专栏主要记录本人的贪心算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话);(4)贪心策略正确性的 “证明”
  • 文章中的理解仅为个人理解。如有错误,感谢纠错

🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础,python入门基础,C++学习笔记,Linux
🎀CSDN主页 愚润泽

你可以点击下方链接,进行其他贪心算法题目的学习

点击链接开始学习
贪心day1贪心day2
贪心day3贪心day4
贪心day5贪心day6
贪心day7贪心day8
贪心day9贪心day10

也可以点击下面连接,学习其他算法

点击链接开始学习
优选专题动态规划
递归、搜索与回溯贪心算法

题目

  • 179. 最大数
    • 优质解
    • 证明
  • 376. 摆动序列
    • 优质解
  • 300. 最长递增子序列
    • 优质解


179. 最大数

题目链接:https://leetcode.cn/problems/largest-number/description/
在这里插入图片描述


优质解

思路:

  • 该题其实就是一个排序问题,排序问题本质是:选择两个数,然后按规则决定两个数的先后顺序
  • 本题:对于ab,我们尝试获得 abba 的组合,哪个组合大,则为正确的排序(这就是本题的贪心策略)
  • 然后,sort的时候按我们的规则排序即可

细节:

  • 我们可以先把数字转换成字符串,然后拼接字符串,比较字典序
  • 全为 0 的特殊情况

代码:

class Solution {
public:string largestNumber(vector<int>& nums) {vector<string> strs;for(auto x: nums) strs.emplace_back(to_string(x));auto rule = [](const string& s1, const string& s2){return s1 + s2 > s2 + s1; // 返回true代表优先级高};sort(strs.begin(), strs.end(), rule);string ans = "";for(auto s: strs)ans += s;return ans[0] == '0'? string("0") : ans;}
};

时间复杂度O(k⋅nlogn)O(k⋅nlogn)O(knlogn),k 为字符串平均长度,拼接操作时间复杂度为 O(k)O(k)O(k)
空间复杂度: O(nk)O(nk)O(nk)

证明

来自Leetcode官方题解答案:
在这里插入图片描述


376. 摆动序列

题目链接:https://leetcode.cn/problems/wiggle-subsequence/description/
在这里插入图片描述


优质解

思路:

  • 贪心策略:以序列结束位置为基准,每次只考虑下一个元素是否会让此序列变得更长
  • 下一个位置有两种情况 >< ,代表两个不同状态结尾的序列
  • >up 序列的是在前一个 down 序列的长度上 +1,如果出现连续的 >,只会 +1 一次(正确性保证 1)
  • 因为我们始终记录了两种状态的序列(即:全部状态),并且每次都是在原来最优解的基础上+1,所以每次的局部最优就是全局最优

代码:

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int n = nums.size();if(n == 1) return 1;int up = 1, down = 1;for(int i = 1; i < nums.size(); i++){if(nums[i] > nums[i - 1])up = down + 1;if(nums[i] < nums[i - 1])down = up + 1;}return max(up, down);}
};

时间复杂度:O(n)O(n)O(n)
空间复杂度:O(1)O(1)O(1)


300. 最长递增子序列

题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/description/
在这里插入图片描述


优质解

思路:

贪心 + 二分

  • 回想动态规划:如果新插入的数字比原来最长子序列的最后一个数字大,则可以接入(所以我们只关注子序列的最后一个元素和新插入的元素的大小)
  • end[i] 表示:长度为 i 的子序列的最后一个元素的大小
  • 每次插入数时,用二分查找找到最佳的插入位置
    • 如果可以接在目前最长的子序列后面,则代表:变得更长
    • 如果不能,则可能更新(变小)前面某一子序列的结尾的数

代码:

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> end; // end[i]: 长度为 i 的序列的结尾的元素end.push_back(nums[0]);for(int i = 1; i < n; i++){if(nums[i] > end.back())end.push_back(nums[i]);else{// 二分查找int left = 0, right = end.size() - 1;while(left < right){int mid = (left + right) >> 1;if(end[mid] < nums[i])left = mid + 1;elseright = mid;}end[left] = nums[i];}} return end.size();}
};

时间复杂度:O(nlogn)O(nlogn)O(nlogn)
空间复杂度:O(n)O(n)O(n)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

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

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

相关文章

Spring Boot整合RabbitMQ进阶实战:TTL、死信队列与延迟队列深度解析

Spring Boot整合RabbitMQ进阶实战&#xff1a;TTL、死信队列与延迟队列深度解析 一、TTL机制深度解析&#xff1a;从原理到落地 在RabbitMQ的消息生命周期管理中&#xff0c;TTL&#xff08;Time-To-Live&#xff09; 是核心机制之一——它通过设置消息的"存活时长"&…

最新react,vue 解决无法使用js触发点击,解决方案

const elements document.getElementsByClassName(remove-btn-eIaRy9 select-none semi-dropdown-item);if (elements.length > 0) {const element elements[0];const rect element.getBoundingClientRect();// 模拟鼠标移动到元素上const mouseOverEvent document.crea…

一键部署开源 Coze Studio

文章目录一、简介1、什么是 Coze Studio2、参考地址二、安装部署1、安装docker2、安装git3、下载core4、配置公网可用5、登录成功一、简介 1、什么是 Coze Studio Coze Studio 是一站式 AI Agent 开发工具。提供各类最新大模型和工具、多种开发模式和框架&#xff0c;从开发到…

Python Excel 通用筛选函数

案例目的 第一个函数从指定文件路径读取CSV数据并转换为DataFrame&#xff0c;第二个函数使用灵活的条件筛选DataFrame。 示例数据!&idxMarketCURRPMTERMANT……*1JPUSD10…*1CHINAEUR00…*1USAUSD10…*2JPJPY10…*3USACNY11…*4CHINACNY00…*5JPUSD11…*6JPJPY00…假定数据…

鸿蒙中内存泄漏分析

引言&#xff1a;什么是内存泄漏&#xff1f; 想象一下你的手机是一个酒店&#xff0c;每个应用程序都是酒店的客人。当客人&#xff08;应用程序&#xff09;使用房间&#xff08;内存&#xff09;时&#xff0c;酒店经理&#xff08;系统&#xff09;会分配房间给他们使用。…

将windows 的路径挂载到Ubuntu上进行直接访问

1、下载hane NFS Server安装2、安装后打开3、在电脑上创建个共享文件夹&#xff0c;我这里选择D:\share4、在hane win nfs server 软件上选择Edit\preferences5、选择exports6、选择Edit exports file, 在最后添加D:\share -name:nfs&#xff0c;然后点击Save如果添加root权限使…

开源 python 应用 开发(十一)短语音转文本

最近有个项目需要做视觉自动化处理的工具&#xff0c;最后选用的软件为python&#xff0c;刚好这个机会进行系统学习。短时间学习&#xff0c;需要快速开发&#xff0c;所以记录要点步骤&#xff0c;防止忘记。 链接&#xff1a; 开源 python 应用 开发&#xff08;一&#xf…

【C++闯关笔记】封装②:友元与模板

系列文章目录 第零篇&#xff1a;从C到C入门&#xff1a;C有而C语言没有的基础知识总结-CSDN博客 第一篇&#xff1a;【C闯关笔记】封装①&#xff1a;类与对象-CSDN博客 第二篇&#xff1a;【C闯关笔记】封装②&#xff1a;友元与模板-CSDN博客 第三篇&#xff1a;【C闯关笔…

Python 爬虫教程 | 豆瓣 TOP250 数据抓取与分析实战

一、项目背景与数据价值豆瓣TOP250是影视行业的重要榜单&#xff0c;具有以下数据价值&#xff1a;评分与评价人数&#xff1a;衡量电影市场热度&#xff1b;导演与演员信息&#xff1a;分析人才价值与影视趋势&#xff1b;类型 / 地区 / 年份&#xff1a;洞察电影类型与年代变…

第04章 SPSS简介与数据库构建

参考&#xff1a;SPSS实战与统计思维 - 武松编著 - 微信读书 4.1 SPSS简介 发展历史 全称Statistical Product and Service Solutions&#xff0c;由美国斯坦福大学三位研究生于1968年开发。 对比其他软件成立时间&#xff1a;SAS&#xff08;1976年&#xff09;、Stata&…

【ABAP4】数据字典

ABAP数据字典ABAP数据字典概述数据字典的基本对象域数据元素表类型系统创建自定义透明表创建自定义结构锁对象ABAP数据字典概述 ABAP数据字典是SAP定义和管理数据的工具&#xff0c;包含了程序使用的所有对象&#xff0c;数据字典中包括数据库表、视图、数据类型、域、搜索帮助…

不知道Pycharm怎么安装?Pycharm安装教程(附安装包)

Pycharm安装教程&#xff08;附安装包&#xff09;获取方式&#xff1a;python开发工具包丨夸克网盘-资源免费下载 有位朋友刚开始学习python&#xff0c;不知道Pycharm要怎么安装&#xff0c;于是问我要一个安装教程。 先介绍一下Pycharm吧&#xff0c;PyCharm是一款python开…

在 Docker 容器中查看 Python 版本

博客目录前言方法一&#xff1a;交互式进入容器查看方法二&#xff1a;启动时直接执行命令方法三&#xff1a;启动后使用 exec 执行命令方法四&#xff1a;直接运行并查看版本&#xff08;容器退出&#xff09;方法比较与选择指南实际应用中的注意事项进阶技巧批量检查多个镜像…

React:Umi + React + Ant Design Pro的基础上接入Mock数据

为什么需要Mock数据 前端开发依赖后端接口时的阻塞问题 独立开发和测试的需求 快速迭代和原型验证的重要性 当前版本及框架 React18 Umi 4.0 Ant Design Ant Design Pro 其实这些都不重要&#xff0c;主要是有Umijs&#xff0c;因为Umijs具有开箱即用Mock功能的能力&#…

VMware centos磁盘容量扩容教程

目录前言相关概念磁盘磁盘分区文件系统挂载点物理卷、VG&#xff08;卷组&#xff09;、LV&#xff08;逻辑卷&#xff09;、LVM&#xff08;逻辑卷管理&#xff09;解决方案前言 这篇博客主要分享我在VM中通过docker搭建dify大模型应用平台时&#xff0c;遇到了分配的磁盘容量…

kubernetes中的认证和授权

一 kubernetes API 访问控制Authentication&#xff08;认证&#xff09;认证方式现共有8种&#xff0c;可以启用一种或多种认证方式&#xff0c;只要有一种认证方式通过&#xff0c;就不再进行其它方式的认证。通常启用X509 Client Certs和Service Accout Tokens两种认证方式。…

雅菲奥朗SRE知识墙分享(四):『AI已开始重塑劳动力市场,美国年轻科技从业者首当其冲』

近日&#xff0c;据《商业内幕》报道&#xff0c;AI正在重塑美国就业市场&#xff0c;年轻的科技从业者正首当其冲地感受到冲击。高盛首席经济学家Jan Hatzius在本周一撰文指出&#xff1a;“AI 确实开始在各类数据中显现出更加明显的迹象。”据高盛的分析&#xff0c;科技行业…

Python爬虫入门指南:从零开始的网络数据获取之旅

文章目录前言1. 什么是网络爬虫&#xff1f;2. 爬虫的伦理与法律边界3. Python爬虫的基本工具库3.1 Requests&#xff1a;HTTP请求库3.2 Beautiful Soup&#xff1a;HTML/XML解析库3.3 lxml&#xff1a;高效XML/HTML解析器3.4 Selenium&#xff1a;自动化浏览器工具4. 第一个爬…

说说你对JVM的垃圾回收机制的理解?

Java 虚拟机&#xff08;JVM&#xff09;的垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;机制是自动管理内存的核心&#xff0c;其核心目标是识别并回收不再被使用的对象所占用的内存&#xff0c;避免内存泄漏和溢出。以下从垃圾判断方法、垃圾回收算法和…

兑换汽水瓶

实现代码&#xff1a;public static void main(String[] args) {Scanner in new Scanner(System.in);while (in.hasNextInt()) {int n in.nextInt();if (n 0) {break;}System.out.println(n / 2);}}