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

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

1. 合并区间

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

思路:

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

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

方法:

java 复制代码
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"这样的用例。

方法:

java 复制代码
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;
            }
        }

        // 赋值为9
        for (int i=flag;i<len;i++){
            chars[i]='9';
        }

        return Integer.parseInt(new String(chars));
    }
}

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

3. 监控二叉树

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

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

二刷一定可以啃下来!

相关推荐
狂奔的sherry8 小时前
JRuby 多线程反引号偶发 127:GC 提前释放了 posix_spawn 的 argv
java·linux·ruby·gc·jruby
咖啡八杯8 小时前
异常体系设计:三类策略(i18n code、message、受检异常)
java·架构·代码规范
mmmmath_38 小时前
LeetCode.637.二叉树的层平均值
算法·leetcode
青少儿编程课堂8 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:并查集连通块与朋友圈问题解析
c++·python·算法·bfs·信息学竞赛
Spatial3Ddddd8 小时前
2026空间三维重建服务商横向对比
java·服务器·人工智能
Tisfy8 小时前
LeetCode 2913.子数组不同元素数目的平方和 I:第一题先常数很大的O(n^2)
算法·leetcode·题解·模拟·暴力
罗湖老棍子8 小时前
[USACO05NOV] Asteroids G(洛谷-P7368)
算法·图论·二分图匹配·最大匹配·最小顶点覆盖
从小白到软工8 小时前
4-1 指针
c语言·开发语言·数据结构·经验分享·ai编程
Rain的Java大神之路8 小时前
Java 三层架构,90% 的人只答对一半:Controller 不是瘦,Service 不是透传,Dao 不是只写 SQL
java·后端·面试
AI技术新视界8 小时前
Harness^2:递归自进化智能体Harnessing框架
人工智能·深度学习·算法·harness·rsi