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

LeetCode56.合并区间

这道题我想了一会儿,实在想不到比较好的算法,只能硬着头皮写了,然后不断的debug,经过我不懈的努力,最后还是AC,不过效率确实低。

我就是按照最直接的方法来,先把intervals数组按照第一个数start来排序,这个是通过定义一个sort方法用冒泡排序实现的,然后用一个List<int[]>来装答案,先把intervals[0]放进答案,用index表示list中最新放入的那个答案的索引(ans.get(index)),然后从i=1开始遍历intervals[i],因为我这个intervals是排过序的,所以后面的intervals[i]的start一定大于等于前面的intervals[i]的start,但是如果intervals[i][0]比最新放入答案的intervals[i][1](ans.get(index)[1])还小,说明intervals[i][0]应该在刚放入的最新答案(ans.get(index))的区间之中,所以我们要去更改那个最新的答案(ans.get(index))的end,把ans.get(index)[1]改为当前元素的end和他自己的end的最大值,这样就可以确保区间无重叠且完整,以下是我的代码:

class Solution {public int[][] merge(int[][] intervals) {int n = intervals.length;int index =-1;sort(intervals);List<int[]> ans = new ArrayList<int[]>();ans.add(intervals[0]);index++;for(int i=1;i<n;i++){if(intervals[i][0] <= ans.get(index)[1]){ans.get(index)[1] = Math.max(ans.get(index)[1],  intervals[i][1]);}else{ans.add(intervals[i]);index++;}}int size = ans.size();int[][] res = new int[size][2];for(int i=0;i<size;i++){res[i] = ans.get(i);}return res;}public void sort(int[][] intervals){int n = intervals.length;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(intervals[i][0] > intervals[j][0]){int[] tmp = new int[]{intervals[i][0], intervals[i][1]};intervals[i][0] =intervals[j][0];intervals[i][1] = intervals[j][1];intervals[j][0] = tmp[0];intervals[j][1]=tmp[1];}}}}
}

一看题解我都惊了,我去,和我的想法一摸一样,我还以为我这种方法很low,原来这是官方解法,以下是题解代码:

class Solution {public int[][] merge(int[][] intervals) {if (intervals.length == 0) {return new int[0][2];}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return interval1[0] - interval2[0];}});List<int[]> merged = new ArrayList<int[]>();for (int i = 0; i < intervals.length; ++i) {int L = intervals[i][0], R = intervals[i][1];if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {merged.add(new int[]{L, R});} else {merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);}}return merged.toArray(new int[merged.size()][]);}
}

原理和我的算法是一模一样的,不一样的是他没有自己定义排序方法而是用了Array.sort()方法,然后重写compare()方法,比较数组中第一个元素也就是strat就可以,然后他也没用index来记录刚放进去的最新答案,而是通过merged.get(merged.size()-1)来获得这个刚放进去的最新答案。

http://www.lryc.cn/news/145716.html

相关文章:

  • 【内推码:NTAMW6c】 MAXIEYE智驾科技2024校招启动啦
  • Python框架【模板继承 、继承模板实战、类视图 、类视图的好处 、类视图使用场景、基于调度方法的类视图】(四)
  • 对于前端模块化的理解与总结(很全乎)
  • NewStarCTF 2022 web方向题解 wp
  • WebGL矩阵变换库
  • block层:8. deadline调度器
  • DTO,VO,PO的意义与他们之间的转换
  • Java 集合框架2
  • 2024王道408数据结构P144 T16
  • 【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】
  • MyBatis的一级缓存和二级缓存是怎么样的?
  • 下载的文件被Windows 11 安全中心自动删除
  • 【Java List与数组】List<T>数组和数组List<T>的区别(124)
  • Nuxt 菜鸟入门学习笔记四:静态资源
  • C语言 - 结构体、结构体数组、结构体指针和结构体嵌套
  • python安装playwright问题记录
  • 关于gRPC微服务利弊之谈
  • 【Terraform学习】使用 Terraform创建Lambda函数启动EC2(Terraform-AWS最佳实战学习)
  • Mac软件删除方法?如何删除不会有残留
  • 编程之道:【性能优化】提高软件效率的实际建议和避免常见陷阱
  • VGG的结构:视觉几何组(Visual Geometry Group)
  • VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据
  • Mybatis1.9 批量删除
  • CUDA小白 - NPP(2) -图像处理-算数和逻辑操作(2)
  • python+redis实现布隆过滤器(含redis5.0版本以上和5.0以下版本的两份代码)
  • SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)
  • 【核磁共振成像】并行采集MRI
  • 深度图相关评测网站
  • 本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama
  • Agilent33220A任意波形发生器