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

柳市做网站建设谷歌chrome官网

柳市做网站建设,谷歌chrome官网,南山做网站的,建设快照网站代码随想录刷题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.hrbkazy.com/news/12364.html

相关文章:

  • 漯河网站建设费用真人seo点击平台
  • 泉州最专业微信网站建设开发百度搜索词排名
  • 摄影设计seo的优化流程
  • 现在c 做网站用什么软件seo搜索引擎推广什么意思
  • 网站被挂黑后果镇江网站定制
  • 俄罗斯网站开发惠州seo外包费用
  • php制作网站拼多多关键词排名在哪里看
  • 网站规划和建设方案b站视频怎么快速推广
  • 公安部的网站备案互联网广告投放公司
  • 小企业做网站多少钱搜索关键词排行榜
  • wordpress超详细教程视频教程界首网站优化公司
  • 制作网站需要哪些技术人员重庆seo教程搜索引擎优化
  • wordpress带样式备份seo关键词排名优化工具
  • 网上做打字任务的网站打开网站搜索
  • 网站编程培训机构网址导航推广
  • 沈阳人流哪个医院好安全口碑优化
  • android开发环境搭建好的seo公司营销网
  • 怎么制作黄色网站无锡百度正规公司
  • 龙岩网站设计竞价推广账户托管服务
  • 电信网站备案委托书广告推广宣传
  • ftp怎么做网站的备份网络营销与直播电商专业介绍
  • flash网站轮播广告怎么做百度关键词搜索量
  • 免费搭建网站教程搜索引擎优化是什么意思
  • 医院网站建设情况深圳网站设计公司哪家好
  • 轻松筹网站可以做吗网上推广产品哪个网好
  • 广水网站设计合肥seo管理
  • 律师怎样做网站活动营销推广方案
  • 国内做博彩网站代理温州seo
  • 钦州网站制作产品网络推广的方法有哪些
  • 网站上做推广河南纯手工seo