【代码随想录】刷题笔记Day37
2023-12-25 15:30:50
前言
- 试一试早上+晚上固定时间刷题会不会效率and养成习惯
135. 分发糖果 - 力扣(LeetCode)
- 两边一起判断容易顾此失彼
- 从左到右遍历,只比较右比左大的情况,局部and全局:右比左大
- 从右到左遍历,只比较左比右大的情况,局部and全局:左比右大
- 取两次遍历得到的最大值,局部and全局:比左右都大
-
class Solution { public: int candy(vector<int>& ratings) { vector<int> candyVec(ratings.size(), 1); // 从前向后 for (int i = 1; i < ratings.size(); i++) { if (ratings[i] > ratings[i - 1]) candyVec[i] = candyVec[i - 1] + 1; } // 从后向前 for (int i = ratings.size() - 2; i >= 0; i--) { if (ratings[i] > ratings[i + 1] ) { candyVec[i] = max(candyVec[i], candyVec[i + 1] + 1); } // 也可以用更新的策略 // if (ratings[i] > ratings[i + 1] && candies[i] <= candies[i + 1]) { // candies[i] = candies[i + 1] + 1; // } } // 统计结果 int result = 0; for (int i = 0; i < candyVec.size(); i++) result += candyVec[i]; return result; } };
860. 柠檬水找零 - 力扣(LeetCode)?
- 这题模拟就行,唯一需要贪心的就是20的时候优先找10+5,而不是5+5+5
-
class Solution { public: bool lemonadeChange(vector<int>& bills) { int five = 0, ten = 0, twenty = 0; for(int i = 0; i < bills.size(); i++){ if(bills[i] == 5){ five++; }else if(bills[i] == 10){ if(five <= 0) return false; ten++; five--; }else if(bills[i] == 20){ // 实际不用维护twenty的数,找不出去 if(ten >= 1 && five >= 1){ // 优先消耗5+10 ten--;five--; } else if(ten <= 0 && five >= 3) five-= 3; else return false; } } return true; } };
406. 根据身高重建队列 - 力扣(LeetCode)
- 双端遍历,要领是第二遍不影响第一遍确定好的符合题目意思的排序(类似分发糖果)
- 先按照h从大到小排(相同则k从小到大),再根据k的值进行插入(不影响其他符合题意)
-
// 用vector效率低,链表效率高 class Solution { public: static bool cmp(const vector<int>& a, const vector<int> b){ if(a[0] == b[0]) return a[1] < b[1]; return a[0] > b[0]; } vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { vector<vector<int>> reQueue; // list<vector<int>> que; // list底层是链表实现,插入效率比vector高的多 sort(people.begin(), people.end(), cmp); for(int i = 0; i < people.size(); i++){ int pos = people[i][1]; reQueue.insert(reQueue.begin() + pos, people[i]); // 链表插入比容器数组效率高,但是没有随机访问功能,只能遍历找插入位置 // std::list<vector<int>>::iterator it = reQueue.begin(); // while (pos--) { // 寻找插入位置 // it++; // } // reQueue.insert(it, people[i]); } return reQueue; // return vector<vector<int>>(reQueue.begin(), reQueue.end()); } };
后言
- 还是折腾到下午了,感觉早上的2小时还是不太够啊,来不及呀来不及~?
文章来源:https://blog.csdn.net/qq_56077562/article/details/135192938
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!