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

网站开发公司 经营范围网站维护客户

网站开发公司 经营范围,网站维护客户,饮料招商网站大全,响应式网站一般做多大代码随想录刷题day31丨56. 合并区间,738.单调递增的数字,总结 1.题目 1.1合并区间 题目链接:56. 合并区间 - 力扣(LeetCode) 视频讲解:贪心算法,合并区间有细节!LeetCode&#x…

代码随想录刷题day31丨56. 合并区间,738.单调递增的数字,总结

1.题目

1.1合并区间

  • 题目链接:56. 合并区间 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,合并区间有细节!LeetCode:56.合并区间_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0056.%E5%90%88%E5%B9%B6%E5%8C%BA%E9%97%B4.html

  • 解题思路:贪心

    • 判断区间重贴后要进行区间合并。
    • 先排序,让所有的相邻区间尽可能的重叠在一起,按左边界
    • 按照左边界从小到大排序之后,如果 intervals[i][0] <= intervals[i - 1][1] 即intervals[i]的左边界 <= intervals[i - 1]的右边界,则一定有重叠。(本题相邻区间也算重贴,所以是<=)
    • 知道如何判断重复之后,剩下的就是合并了,如何去模拟合并区间呢?
      • 其实就是用合并区间后左边界和右边界,作为一个新的区间,加入到result数组里就可以了。如果没有合并就把原区间加入到result数组。
  • 代码:

    //时间复杂度: O(nlogn)
    //空间复杂度: O(logn)
    class Solution {public int[][] merge(int[][] intervals) {//按照左边界排序Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));List<int[]> result = new LinkedList<>();// 第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并result.add(intervals[0]);for(int i = 1;i < intervals.length;i++){if(intervals[i][0] <= result.getLast()[1]){result.getLast()[1] = Math.max(intervals[i][1],result.getLast()[1]);}else{result.add(intervals[i]);}}return result.toArray(new int[result.size()][]);}
    }
    
  • 总结:

    • 本质其实还是判断重叠区间问题。

1.2单调递增的数字

  • 题目链接:738. 单调递增的数字 - 力扣(LeetCode)

    在这里插入图片描述

  • 视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字_哔哩哔哩_bilibili

  • 文档讲解:https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html

  • 解题思路:贪心

    • 从后往前遍历
    • 一旦出现chars[i - 1] > chars[i]的情况(非单调递增),首先想让chars[i - 1]减一,chars[i]赋值9
  • 代码:

    class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] chars = s.toCharArray();// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag = chars.length;for(int i = chars.length - 1;i > 0;i--){if(chars[i - 1] > chars[i]){chars[i - 1]--;flag = i;}}for(int i = flag;i < chars.length;i++){chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));}
    }
    
  • 总结:

    • 最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。

2.贪心总结

  • 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

  • 贪心没套路,就刷题而言,如果感觉好像局部最优可以推出全局最优,然后想不到反例,那就试一试贪心吧!

  • for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历

http://www.yayakq.cn/news/441520/

相关文章:

  • 工信部网站备案验证码网站建设首选玖艺建站信得过
  • 茶山做网站苏州app外包
  • 网站建设方案 前台 后台网站的安全怎么做
  • 网站设计 工作房屋备案信息查询入口
  • photoshop网站模板设计教程视频空间一个数据库可以做几个网站
  • 简历在线制作网站免费discuzx转wordpress
  • 网站制作找化妆品网站建设的目的
  • 淄博建网站哪家好中小企业网站查询
  • 深圳网站建设开发公司东莞网约车驾驶员资格证网上报名
  • 淘宝网站框架宁波网站建设 熊掌号
  • 中国建设银行网站开通短信谷歌网站统计
  • 建设部注册监理工程师网站电商网站seo怎么做
  • 厦门做网站优化价格工作总结教师
  • 南京做网站品牌wordpress文章中带轮播图
  • 江苏省建设培训网站软件开发专业课程有哪些
  • 什么公司会招网站建设seo成都培训
  • 网站修改title服装设计网
  • 昆明学网站建设网站开发项目推荐
  • 做卷子的网站品牌建设工作方案
  • 网站建设及维护专业宝安附近公司做网站建设哪家效益快
  • 个人建网站运营.山东网站推广
  • 太原网站排名公司网站建设都有哪些
  • 简述企业网站建设的目的北京市建设厅官方网站
  • 智慧旅游网站建设方案ppt模板建设网站个人网上银行
  • 深圳网站开发哪个好宁波专业建网站外包
  • 网站开发建设交印花税吗微平台推广
  • 网站建设源码包广州现在算什么风险地区
  • 解析网站咋做的暴雪手游
  • 我做的网站服务器别人没法左键点击下载呢电子商务网站建设实训内容
  • 单页网站开发费用农业公司注册流程及费用