LeetCode 101题集(随时更新)

题集来源:GitHub - changgyhub/leetcode_101: LeetCode 101:力扣刷题指南

使用C++完成相关题目,以训练笔试


贪心

采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。

分配问题

455. 分发饼干 - 力扣(LeetCode)

题解:分别对孩子和饼干排序,从小到大尽可能多的满足孩子

class Solution 
{
public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int child = 0, cookie = 0;while(child < g.size() && cookie < s.size()){if(g[child] <= s[cookie])   child ++;cookie ++;}return child;}
};

135. 分发糖果 - 力扣(LeetCode)

题解:先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的糖果数加 1;再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数加 1。

class Solution 
{
public:int candy(vector<int>& ratings) {int size = ratings.size();if(size < 2)    return size;vector<int> num(size, 1);for(int i = 1; i < size; i ++)if(ratings[i] > ratings[i - 1])num[i] = num[i - 1] + 1;for(int i = size - 1; i > 0; i --)if(ratings[i] < ratings[i - 1])num[i - 1] = max(num[i - 1], num[i] + 1);return accumulate(num.begin(), num.end(), 0);}
};

区间问题

435. 无重叠区间 - 力扣(LeetCode)

题解:先把区间按照结尾的大小进行增序排序,每次选择结尾最小且和前一个选择的区间不重叠的区间。

class Solution 
{
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if(intervals.empty())return 0;int n = intervals.size();sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b){return a[1] < b[1];});int removed = 0, prev = intervals[0][1];for(int i = 1; i < n; i ++){if(intervals[i][0] < prev)removed ++;elseprev = intervals[i][1];}return removed;}
};

练习 

605. 种花问题 - 力扣(LeetCode)

题解:花不能种植在相邻的地块上!!!

class Solution 
{
public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int count = 0, size = flowerbed.size();for(int i = 0; i < size; i ++)if((i == 0 || flowerbed[i-1] == 0) && //0号坑or前一坑没种flowerbed[i] == 0 && //当前坑没种(i == size-1 || flowerbed[i+1] == 0))//最后一个坑or下一个坑没种{count ++;//在当前坑种花flowerbed[i] = 1;}return count >= n;}
};

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

题解:类435,单位判断条件不同

class Solution 
{
public:int findMinArrowShots(vector<vector<int>>& points) {if(points.empty())return 0;int n = points.size();sort(points.begin(), points.end(), [](vector<int>& a, vector<int>& b){return a[1] < b[1];});int arrows = 1, prev = points[0][1];for(int i = 1; i < n; i ++)if(points[i][0] > prev){arrows ++;prev = points[i][1];}return arrows;}
};

763. 划分字母区间 - 力扣(LeetCode)

题解:第一次遍历确定每个字母的最后出现的下标,第二次遍历实时更新每个片段的最后下标

class Solution 
{
public:vector<int> partitionLabels(string s) {int last[26];for(int i = 0; i < s.size();i ++)last[s[i] - 'a'] = i;vector<int> ans;int l = 0, r = 0;for(int i = 0; i < s.size(); i ++){r = max(r, last[s[i] - 'a']);if(i == r){ans.push_back(r - l + 1);l = i + 1;}}return ans;}
};

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

题解:每天保证至少不亏钱

class Solution 
{
public:int maxProfit(vector<int>& prices) {int ans = 0;for(int i = 1; i < prices.size(); i ++)ans += max(0, prices[i] - prices[i-1]);return ans;}
};

406. 根据身高重建队列 - 力扣(LeetCode)

题解:先按身高从高往低排,再按前边比自身高的人数依次插入队列即可

class Solution 
{
public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), [](vector<int>& a, vector<int>& b){return a[0] > b[0] || (a[0] == b[0] && a[1] < b[1]);});vector<vector<int>> ans;for(auto person : people)ans.insert(ans.begin() + person[1], person);return ans;}
};

665. 非递减数列 - 力扣(LeetCode)

题解:不仅要确保不小于上一位,还好比较上上一位,以确定整体非递减

class Solution 
{
public:bool checkPossibility(vector<int>& nums) {int count = 0, n = nums.size();for(int i = 1; i < n; i ++)if(nums[i] < nums[i-1]){if(i == 1 || nums[i] >= nums[i-2])nums[i-1] = nums[i];elsenums[i] = nums[i-1];count ++;}return count <= 1;}
};

双指针

两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。

两数之和

167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

题解:双指针分别从左往右,从右往左遍历数组

class Solution 
{
public:vector<int> twoSum(vector<int>& numbers, int target) {int l = 0, r = numbers.size()-1, sum = 0;while(l < r){sum = numbers[l] + numbers[r];if(sum == target)   break;if(sum < target)    l ++;else    r --;}return vector<int>{l + 1, r + 1};}
};

归并数组

88. 合并两个有序数组 - 力扣(LeetCode) 

题解:倒序将两数组归并在第一个数组,避免开辟额外空间

++ 和 -- 的小技巧: a++ 和 ++a 都是将 a 加 1,但是 a++ 返回值为 a,而++a 返回值为 a+1。如果只是希望增加 a 的值,而不需要返回值,则推荐使用 ++a,其运行速度会略快一些。

class Solution 
{
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int k = m-- + n-- - 1;while(m >= 0 && n >= 0)nums1[k -- ] = nums1[m] > nums2[n] ? nums1[m --] : nums2[n --];while(n >= 0)nums1[k --] = nums2[n --];    }
};

快慢指针

142. 环形链表 II - 力扣(LeetCode)

题解

Floyd 判圈法:给定两个指针,分别命名为 slow 和 fast,起始位置在链表的开头。每次 fast 前进两步, slow 前进一步。如果 fast可以走到尽头,那么说明没有环路;如果 fast 可以无限走下去,那么说明一定有环路,且一定存在一个时刻 slow 和 fast 相遇。当 slow 和 fast 第一次相遇时,我们将 fast 重新移动到链表开头,并让 slow 和 fast 每次都前进一步。当 slow 和 fast 第二次相遇时,相遇的节点即为环路的开始点。

class Solution 
{
public:ListNode *detectCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;while (true) {if (fast == nullptr || fast->next == nullptr) return nullptr;fast = fast->next->next;slow = slow->next;if (fast == slow) break;}fast = head;while(slow != fast){slow = slow -> next;fast = fast -> next;}return fast;}
};

滑动窗口 

 76. 最小覆盖子串 - 力扣(LeetCode)

题解:先统计字符串情况,再根据字符串情况滑动窗口

class Solution
{
public:string minWindow(string s, string t){//先统计字符情况int baseHash[128] = { 0 }, curHash[128] = { 0 };for(auto& ch : t){++baseHash[ch];}int k = 0, minLen = s.size() + 1;//k:记录窗口起始位置 minLen:记录最小窗口长度int l = 0, r = 0, count = 0;//外层循环:窗口扩张while(r < s.size()){char i = s[r++];if(++curHash[i] <= baseHash[i]){++count;}//内层循环:窗口收缩while(count == t.size()){if(r-l < minLen){k = l;minLen = r-l;}char o = s[l++];if(curHash[o]-- <= baseHash[o]){--count;}}}return minLen > s.size() ? "" : s.substr(k, minLen);}
};

练习

633. 平方数之和 - 力扣(LeetCode)

题解:类167,将c开根后与0进行平方和并判断大小

class Solution 
{
public:bool judgeSquareSum(int c) {long l = 0;long r = (long)sqrt(c);while(l <= r){long sum = l*l + r*r;if(sum == c)    return true;else if(sum > c)    r --;else    l ++;}return false;}
};

680. 验证回文串 II - 力扣(LeetCode)

题解:类167,双指针循环判断

class Solution 
{
private:bool isPalindrome(string& s, int left, int right) {for(;left < right; ++left, --right)if (s[left] != s[right]) return false;return true;}public:bool validPalindrome(string s) {for(int l = 0, r = s.size()-1; l < r; ++l, --r)if(s[l] != s[r])return isPalindrome(s, l+1, r) || isPalindrome(s, l, r-1);return true;}
};

 524. 通过删除字母匹配到字典里最长单词 - 力扣(LeetCode)

题解:排序 + 贪心 + 双指针

class Solution 
{
public:string findLongestWord(string s, vector<string>& dictionary) {sort(dictionary.begin(), dictionary.end(), [](string& a, string& b){return a.size() == b.size() ? a < b : a.size() > b.size();});int n = s.size();for(auto& ss : dictionary){int m = ss.size();if(m > n)   continue;int i = 0, j = 0;while(i < n && j < m){if(s[i] == ss[j])   j ++;i++;}if(j == m)  return ss;}return "";}
};

340. 至多包含 K 个不同字符的最长子串 - 力扣(LeetCode) 

题解:类76

class Solution 
{
public:int lengthOfLongestSubstringKDistinct(string s, int k) {if (s.size() == 0 || k == 0)return 0;int l = 0, r = 0, count = 0;int char_set[256] = {0};int ans = 0;//外层循环:窗口扩张while (r < s.size()) {if (char_set[s[r]] == 0)count++;char_set[s[r ++]]++;//内层循环:窗口收缩while (count > k){char_set[s[l]]--;if (char_set[s[l ++]] == 0)count--;}ans = max(ans, r - l);}return ans;}
};

二分(后续更新)

排序

搜索

dp

分治

数学问题

位运算

STL

字符串

指针一:链表

指针二:树

指针三:图

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

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

相关文章

百度主动推送可以提升抓取,它能提升索引量吗?

站长在建站SEO的时候&#xff0c;需要用到百度站长平台&#xff08;资源平台&#xff09;的工具&#xff0c;在站长工具中【普通收录】-【资源提交】-【API提交】这个功能&#xff0c;对网站的抓取进行一个提交。 这里估计很多站长就有疑问&#xff0c;如果我主动推送&#xf…

DevOps-Jenkins-新手入门级

1. Jenkins概述 1. Jenkins是一个开源持续集成的工具&#xff0c;是由JAVA开发而成 2. Jenkins是一个调度平台&#xff0c;本身不处理任何事情&#xff0c;调用插件来完成所有的工作 1.1 什么是代码部署 代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务…

速通前端篇 —— CSS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;速通前端 目录 CSS的介绍 基本语法规范 CSS选择器 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 CSS常见样式 颜…

51c大模型~合集76

我自己的原文哦~ https://blog.51cto.com/whaosoft/12617524 #诺奖得主哈萨比斯新作登Nature&#xff0c;AlphaQubit解码出更可靠量子计算机 谷歌「Alpha」家族又壮大了&#xff0c;这次瞄准了量子计算领域。 今天凌晨&#xff0c;新晋诺贝尔化学奖得主、DeepMind 创始人哈萨…

怎么只提取视频中的声音?从视频中提取纯音频技巧

在数字媒体的广泛应用中&#xff0c;提取视频中的声音已成为一项常见且重要的操作。无论是为了学习、娱乐、创作还是法律用途&#xff0c;提取声音都能为我们带来诸多便利。怎么只提取视频中的声音&#xff1f;本文将详细介绍提取声音的原因、工具、方法以及注意事项。 一、为什…

IDEA如何设置编码格式,字符编码,全局编码和项目编码格式

前言 大家好&#xff0c;我是小徐啊。我们在开发Java项目&#xff08;Springboot&#xff09;的时候&#xff0c;一般都是会设置好对应的编码格式的。如果设置的不恰当&#xff0c;容易造成乱码的问题&#xff0c;这是要避免的。今天&#xff0c;小徐就来介绍下我们如何在IDEA…

Unable to find image ‘hello-world:latest‘ locally

网上对于这个问题的解答有很多了&#xff0c;我尝试了后并有解决&#xff0c;最后发现重启指令并没有使用sudo导致的。这里写一下总的解决方法&#xff1a; 1 查看是否已经有了hello-world sudo docker info如果有hello-world&#xff0c;就先删除 sudo docker rmi hello-w…

Web3.0安全开发实践:Clarity最佳实践总结

在过去的一段时间里&#xff0c;CertiK团队对比特币生态系统及其发展进行了深入研究。同时&#xff0c;团队还审计了多个比特币项目以及基于不同编程语言的智能合约&#xff0c;包括OKX的BRC-20钱包和MVC DAO的sCrypt智能合约实现。 现在&#xff0c;我们的研究重点转向了Clar…

Chrome离线安装包下载

1、问Chrome的官网&#xff1a;https://www.google.cn/chrome/ 直接下载的是在线安装包&#xff0c;安装需要联网。 2、如果需要在无法联网的设备上安装Chrome&#xff0c;需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址&#xff1a;https://www.google.c…

【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏

给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中&#xff0c;Alice 可以从 nums 中选择所有个位数 或 所有两位数&#xff0c;剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和&#xff0c;则 Alice 获胜。 如果 Alice 能赢得这场游…

前端速通(JavaScript)

1 初识JavaScript 1 JavaScript是什么 JavaScript 是一种高层的、轻量级的、解释型的编程语言&#xff0c;最初由 Netscape 公司于 1995 年开发。它的特点包括&#xff1a; 动态性&#xff1a;JavaScript是动态类型语言&#xff0c;允许开发者灵活地操作数据。跨平台&#xf…

分层架构 IM 系统之架构演进

在电商业务日活几百万的情况下&#xff0c;IM 系统采用分层架构方式&#xff0c;如下图。 分层架构的 IM 系统&#xff0c;整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】&#xff0c;我们在上篇文章&#xff08;分层架构 IM 系…

基于ToLua的C#和Lua内存共享方案保姆级教程

C#和Lua内存共享方案保姆级教程 前言 在介绍C#和Lua内存共享方案之前,先介绍下面两个点来支撑这个方案的必要性 跨语言交互很费 Lua和C#交互最早是基于反射的方式实现的,后来为了提升性能发展成Luajit+C#静态方法导出注入到lua虚拟机的方式至此Lua+Unity的性能才达到了实…

SpringSecurity创建一个简单的自定义表单的认证应用

1、SpringSecurity 自定义表单 在 Spring Security 中创建自定义表单认证应用是一个常见的需求&#xff0c;特别是在需要自定义登录页面、认证逻辑或添加额外的表单字段时。以下是一个详细的步骤指南&#xff0c;帮助你创建一个自定义表单认证应用。 2、基于 SpringSecurity 的…

创客匠人老蒋:个人IP如何获取有效流量?

大家好&#xff0c;我是老蒋。 为什么我反复强调说&#xff0c;如果你想把个人IP、创始人IP做起来&#xff0c;想把自己直播间的流量变大变活&#xff0c;一定要去参加这场将在2024年底举办的《全球创始人IP领袖高峰论坛》&#xff1f;一定要走出去看看更高的世界&#xff1f;…

华三(H3C)T1020 IPS服务器硬件监控指标解读

在日益复杂的网络环境中&#xff0c;服务器的稳定运行对于保障业务的连续性和安全性至关重要。华三&#xff08;H3C&#xff09;T1020 IPS作为一款高性能的入侵防御系统&#xff0c;其运行状态和性能监控显得尤为重要。监控易作为一款专业的监控软件&#xff0c;为华三T1020 IP…

【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 最近用Unity3D的HDRP&#xff08;高清渲染管…

数据结构-7.Java. 对象的比较

本篇博客给大家带来的是java对象的比较的知识点, 其中包括 用户自定义类型比较, PriorityQueue的比较方式, 三种比较方法...... 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 .…

OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::fisheye::calibrate 函数是 OpenCV 中用于校正鱼眼镜头畸变的一个重要函数。该函数通过一系列棋盘格标定板的图像来计算相机的内参矩阵和畸变…

GitLab使用操作v1.0

1.前置条件 Gitlab 项目地址&#xff1a;http://******/req Gitlab账户信息&#xff1a;例如 001/******自己的分支名称&#xff1a;例如 001-master&#xff08;注&#xff1a;master只有项目创建者有权限更新&#xff0c;我们只能更新自己分支&#xff0c;然后创建合并请求&…