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

【代码随想录day31】【C++复健】56. 合并区间;738.单调递增的数字

56. 合并区间

遇到了三个问题,一一说来:
1 比较应该按左区间排序,我却写了右区间。由于本题是合并区间,判断是否连续显然是用下一个的左区间与前一个的右区间比较,属于没想清楚了。

2 在写for循环时写成了如下的代码:
但margin不应该取i+1,因为在这种情况下,第i号的intervals实际上还没有被添加到结果集result里面,所以应该是令margin=intervals[i]才是对的。

        for(int i=0; i<intervals.size(); i++){if(margin[1] >= intervals[i][0]){margin[1] = max(intervals[i][1], margin[1]);}else{result.push_back(margin);if(i != intervals.size()-1){margin = intervals[i+1];}}}

3 提交后发现速度只击败了10%

换成了Lambda 表达式一下从134ms变成了7ms,问了下GPT:

并且自己对lambda表达式的定义方法也还需要再熟悉。 

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), [](vector<int> &val1, vector<int> &val2) {return val1[0] < val2[0];});vector<int> margin = intervals[0];vector<vector<int>> result;for(int i=1; i<intervals.size(); i++){if(margin[1] >= intervals[i][0]){margin[1] = max(intervals[i][1], margin[1]);}else{result.push_back(margin);margin = intervals[i];}}result.push_back(margin);return result;}

738.单调递增的数字

没看解析前自己想的方法逻辑有漏洞,还以为结果不是原始的n就是x999,但实际上并非如此;

实际上的规则应该是:从哪一位开始违反递增规则,就把其后面的数全都置为9,并且将当前位置元素值-1,然后当前位置元素值发生变化有可能会影响与前面元素的大小关系。因此,这使得遍历顺序需要从后往前。

看完了解析后,自己写了一版,只能用麻烦来形容:

class Solution {
public:int monotoneIncreasingDigits(int n) {deque<int> nums;int slice = n;int cur = 0;int pre = 9;while(slice > 0){  cur = slice - int(slice/10)*10;slice = slice/10;if(pre < cur){for(int i=0; i<nums.size(); i++){nums[i] = 9;}nums.push_front(cur-1);pre = cur - 1;}else{nums.push_front(cur);pre = cur;}}int result = 0;int length = nums.size();for(int i=0; i<length; i++){result = result*10 + nums[i];}return result;}
};

主要麻烦在了2个方面:
1 没把int直接转string,如果转了的话不仅可以直接访问每一位对应的值,还可以直接通过s.size()知道这个数有几位,这些都是int无法做到的。我直接用int写,多写了很多才达到相同效果,包括获取每一位的代码,以及最后转回int的代码,都要比str费事。

2 每次发现一个位置不行的时候,不需要立刻在原处就执行一遍9的替换和当前位置-1,因为前面的位置上还有可能出状况,现在做了替换很有可能是白干。只要用一个参数记录最靠前的出问题的位置,然后这个位置-1,后面全用9替换即可。这样做下来确实思路更清晰更好。

http://www.lryc.cn/news/485463.html

相关文章:

  • jmeter常用配置元件介绍总结之逻辑控制器
  • 解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍后片刻再重试,或与系统管理员或技术支持联系“问题
  • 中文书籍对《人月神话》的引用(161-210本):微软的秘密
  • 关于写React的一些反思和总结
  • Qt 每日面试题 -10
  • 三正科技笔试题
  • Selective attention improves transformer详细解读
  • git配置用户信息
  • 【eNSP】路由基础与路由来源——静态路由实验
  • Python Web 应用开发基础知识
  • STM32 标准库函数 GPIO_SetBits、GPIO_ResetBits、GPIO_WriteBit、GPIO_Write 区别
  • 【Redis_Day4】内部编码和单线程模型
  • Vue模块化开发的理解
  • 在Ubuntu22.04上源码构建ROS noetic环境
  • 算法--解决二叉树遍历问题
  • [刷题]入门1.矩阵转置
  • Flutter开发之flutter_local_notifications
  • Gradle和maven
  • RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)
  • 服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
  • Qt 项目架构设计
  • Elasticsearch:管理和排除 Elasticsearch 内存故障
  • 高级java每日一道面试题-2024年11月07日-Redis篇-Redis有哪些功能?
  • 实用且免费的 IP 地域查询 API 接口推荐
  • STM32学习笔记----SPI协议
  • Ceph的pool有两种类型
  • 推荐一款流程图和图表绘制工具:WizFlow Flowcharter Pro
  • 设计模式之插件模式
  • 深度学习基础—Beam search集束搜索
  • STM32 串口输出调试信息