【算法刷题day36】Leetcode:435. 无重叠区间、763.划分字母区间、56. 合并区间

草稿图网站
java的Deque

Leetcode 435. 无重叠区间

题目:435. 无重叠区间
解析:代码随想录解析

解题思路

先按start从小到大排序,定义一个end,如果node[0]超过end,则不用删减,end更新为node[1];如果没超过,就更新end为end和node[1]的最小值

代码

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a, b) -> {
            return Integer.compare(a[0], b[0]);
        });
        int res = 0;
        int end = Integer.MIN_VALUE;
        for (int[] node : intervals) {
            if (node[0] >= end) {
                end = node[1];
            } else {
                end = Math.min(end, node[1]);
                res++;
            }
        }
        return res;
    }
}

//卡哥的原地操作
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a, b) -> {
            return Integer.compare(a[0], b[0]);
        });
        int count = 1;
        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] < intervals[i-1][1]) {
                intervals[i][1] = Math.min(intervals[i-1][1], intervals[i][1]);
            } else {
                count++;
            }
        }
        return intervals.length - count;
    }
}

总结

暂无

Leetcode 763.划分字母区间

题目:763.划分字母区间
解析:代码随想录解析

解题思路

先找到每个字母的结束位置,然后每次更新目前区间的结束位置,如果到了就记录长度。

代码

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>();
        int[] ends = new int[26];
        for (int i = 0; i < s.length(); i++)
            ends[s.charAt(i) - 'a'] = i;
        int idx = 0;
        int last = -1;
        for (int i = 0; i < s.length(); i++) {
            idx = Math.max(idx, ends[s.charAt(i) - 'a']);
            if (i == idx) {
                res.add(i - last);
                last = i;
            }
        }
        return res;
    }
}

总结

Leetcode 56. 合并区间

题目:56. 合并区间
解析:代码随想录解析

解题思路

记录好start和end。如果超过当前的第一个数超过end,就将上一个加入res中。

代码

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[0],b[0]));
        int start = intervals[0][0];
        int end = intervals[0][1];
        for (int i = 0; i < intervals.length; i++) {
            if (intervals[i][0] > end) {
                res.add(new int[]{start, end});
                start = intervals[i][0];
                end = intervals[i][1];
            } else {
                end = Math.max(end, intervals[i][1]);
            }
        }
        res.add(new int[]{start, end});
        return res.toArray(new int[res.size()][]);
    }
}

总结

暂无

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 02:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 02:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 02:04:03       87 阅读
  4. Python语言-面向对象

    2024-05-01 02:04:03       96 阅读

热门阅读

  1. Grafana可视化-之仪表盘开发变量详解

    2024-05-01 02:04:03       30 阅读
  2. RabbitMQ各组件参数详解(9)

    2024-05-01 02:04:03       31 阅读
  3. C++学习第九课:指针的精髓与应用

    2024-05-01 02:04:03       33 阅读
  4. QT6之多线程——子类化QObject和子类化QThread

    2024-05-01 02:04:03       26 阅读
  5. 亚远景科技-什么是R.A.S.I.C角色职权矩阵

    2024-05-01 02:04:03       28 阅读
  6. 浏览器里的扩展程序怎么取出来

    2024-05-01 02:04:03       44 阅读
  7. [CISCN 2021初赛]imageencrypt

    2024-05-01 02:04:03       28 阅读
  8. 深入理解C语言中的 extern`和 static

    2024-05-01 02:04:03       34 阅读
  9. GET 和 POST 请求方式的区别

    2024-05-01 02:04:03       25 阅读
  10. 商城数据库88张表结构(十五)

    2024-05-01 02:04:03       32 阅读
  11. Nginx知识点汇总表格总结

    2024-05-01 02:04:03       26 阅读
  12. 华纳云:服务器DDoS攻击有哪些类型?

    2024-05-01 02:04:03       32 阅读