欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 夸父追日:第八章 贪心算法 part05

夸父追日:第八章 贪心算法 part05

2025/9/17 10:19:00 来源:https://blog.csdn.net/qq_56221558/article/details/141831048  浏览:    关键词:夸父追日:第八章 贪心算法 part05

今日收获:合并区间,单调递增的数字,监控二叉树

1. 合并区间

题目链接:56. - 力扣(LeetCode)

思路:

(1)局部最优:将区间靠左排序,每次合并都取最大的右区间。

(2)记录初始的左右区间,如果遍历到重叠区间,更新右区间为重叠区间中最长的右区间;如果没有重叠,就添加重叠区间的起始位置到结果中,再更新起始位置为当前区间的起始位置。注意遍历结束后需要再添加一次区间的起始位置。

方法:

class Solution {public int[][] merge(int[][] intervals) {// 向左排序Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));List<int[]> result=new ArrayList<>();int left=intervals[0][0];int rightMostBound=intervals[0][1];for (int i=1;i<intervals.length;i++){// 重叠区间if (intervals[i][0]<=rightMostBound){rightMostBound=Math.max(intervals[i][1],rightMostBound);  // 扩展重叠区间}else{  // 不重叠result.add(new int[]{left,rightMostBound});left=intervals[i][0];rightMostBound=intervals[i][1];}}result.add(new int[]{left,rightMostBound});return result.toArray(new int[result.size()][]);}
}

 总结:自己的代码能力还是不够,有的时候思路大体对了,但是代码中有很多的小错误。

2. 单调递增的数字

题目链接:738. - 力扣(LeetCode)

思路:

(1)局部最优:如果发现前后两位不满足顺序要求,就将前一位减一,后一位取9

(2)从后往前遍历数字,如果后一位大于前一位,就更新变为9的位置,前一位减一。利用flag记录变为9的位置是为了“1000”这样的用例。

方法:

class Solution {public int monotoneIncreasingDigits(int n) {String str=String.valueOf(n);char[] chars=str.toCharArray();int len=chars.length;int flag=len;  // 变为9的位置// 从后向前遍历for (int i=len-1;i>0;i--){if (chars[i-1]>chars[i]){chars[i-1]--;flag=i;}}// 赋值为9for (int i=flag;i<len;i++){chars[i]='9';}return Integer.parseInt(new String(chars));}
}

总结:int类型转换为String类型,方法String.valueOf(n),需要总结到String常用方法中

3. 监控二叉树

题目链接:968. - 力扣(LeetCode)

思路:从下往上遍历,在叶子节点的父节点上放摄像头,然后再每隔两个节点放一个摄像头,这样可以省下更多的摄像头。

二刷一定可以啃下来!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词