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

山西人工智能建站系统软件今日最新新闻摘抄

山西人工智能建站系统软件,今日最新新闻摘抄,对网站建设的考核机制,安卓开发app合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入&am…

合并区间-力扣算法题56题

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

java实现算法代码

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()][]);}
}

算法思路(力扣的思路)

如果我们按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的: 

 

算法

我们用数组 merged 存储最终的答案。

首先,我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入 merged 数组中,并按顺序依次考虑之后的每个区间:

如果当前区间的左端点在数组 merged 中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组 merged 的末尾;

否则,它们重合,我们需要用当前区间的右端点更新数组 merged 中最后一个区间的右端点,将其置为二者的较大值。

正确性证明

上述算法的正确性可以用反证法来证明:在排完序后的数组中,两个本应合并的区间没能被合并,那么说明存在这样的三元组 (i,j,k) 以及数组中的三个区间 a[i],a[j],a[k] 满足 i<j<k 并且 (a[i],a[k])可以合并,但 (a[i],a[j]) 和 (a[j],a[k]) 不能合并。这说明它们满足下面的不等式:

a[i].end<a[j].start(a[i] 和 a[j] 不能合并)a[j].end<a[k].start(a[j] 和 a[k] 不能合并)a[i].end≥a[k].start(a[i] 和 a[k] 可以合并)
                        a[i].end<a[j].start(a[i] 和 a[j] 不能合并)
                        a[j].end<a[k].start(a[j] 和 a[k] 不能合并)
                        a[i].end≥a[k].start(a[i] 和 a[k] 可以合并)
我们联立这些不等式,可以得到:

                                        a[i].end<a[j].start≤a[j].end<a[k].start
产生了矛盾!这说明假设是不成立的。因此,所有能够合并的区间都必然是连续的。

我的思路

1.先判断该 intervals是否为空,为空则返回一个空的二维数组int[0][2]

2.不为空的话,先用Array.sort(T[] a,Comparator<? super T> c)来定制一个只比较数组的最左端并使用升序排序的Compare排序器

3.之后将二维数组封装在一个List集合里面,进行下一步比较

4.有两种情况

        4.1. 如果第一个区间的最右端的值小于下一个区间的最左端的值,则在List集合中再添加一个区间

        4.2. 如果第一个区间的最右端的值大于等于下一个区间最左端的值,则将第一个区间最右端的值修改为下一个区间最右端的值

5.将List转换为数组并以二维数组的形式返回即可

使用方法Arrays.sort和Comprator

Arrays.sort使用文档

  • public static <T> void sort​(T[] a, Comparator<? super T> c)
    • 根据指定比较器引发的顺序对指定的对象数组进行排序。 数组中的所有元素都必须是指定比较相互比较的 (即, c.compare(e1, e2)不得抛出ClassCastException任何元件e1e2阵列中)。

      这种保证是稳定的 :相同的元素不会因排序而重新排序。

      实现注意事项:此实现是一个稳定的,自适应的迭代合并输出,当输入数组部分排序时,需要远远少于n lg(n)的比较,同时在输入数组随机排序时提供传统mergesort的性能。 如果输入数组几乎排序,则实现需要大约n次比较。 临时存储要求从几乎排序的输入数组的小常量到随机排序的输入数组的n / 2个对象引用不等。

      该实现在其输入数组中具有升序和降序的相同优势,并且可以利用同一输入数组的不同部分中的升序和降序。 它非常适合合并两个或多个排序数组:只需连接数组并对结果数组进行排序。

      参数类型

      T - 要排序的对象的类

      参数

      a - 要排序的数组

      c - 用于确定阵列顺序的比较器。 null值表示应使用元素' natural ordering 。

      异常

      ClassCastException - 如果数组包含使用指定比较器无法 相互比较的元素

      IllegalArgumentException - (可选)如果发现比较器违反了Comparator合同

 Comprator使用文档

  • public interface Comparator<T>
    比较函数,它对某些对象集合施加总排序 。 可以将比较器传递给排序方法(例如Collections.sortArrays.sort ),以便精确控制排序顺序。 比较器还可用于控制某些数据结构的顺序(例如sorted setssorted maps ),或者为没有natural ordering的对象集合提供排序。

    比较器c对一组元素S施加的排序被认为与等号一致,当且仅当c.compare(e1, e2)==0具有与e1.equals(e2)e1e2S中的S相同的布尔值时。

    当使用能够强加与equals不一致的排序的比较器来排序有序集(或有序映射)时,应该谨慎行事。 假设具有显式比较器c的有序集(或有序映射)与从集合S提取的元素(或键) S 。 如果cS的排序与equals不一致,则排序集(或有序映射)将表现得“奇怪”。 特别是有序集(或有序映射)将违反集合(或映射)的一般合同,其定义为equals

    例如,假设有两个元素ab ,使(a.equals(b) && c.compare(a, b) != 0)为空TreeSet ,比较器为c 。 第二个add操作将返回true(并且树集的大小将增加)因为ab在树集的视角中不相等,即使这与Set.add方法的规范相反。

    注意:这通常是一个好主意比较,也能实现java.io.Serializable ,因为它们可能被用来作为排序的序列化数据结构的方法(如TreeSetTreeMap )。 为了使数据结构成功序列化,比较器(如果提供)必须实现Serializable

    对于数学上的倾斜,即限定了施加顺序给定的比较器的关系 c上一组给定对象强加S是:

      {(x, y) such that c.compare(x, y) <= 0}. 
    此总订单的是:
      {(x, y) such that c.compare(x, y) == 0}. 
    它从合同紧跟compare ,该商数是一个等价关系 S ,并且实行排序是全序 S 。 当我们说cS施加的排序与equals一致时 ,我们的意思是排序的商是由对象' equals(Object)方法定义的等价关系:
      {(x, y) such that x.equals(y)}. 

    Comparable不同,比较器可以选择允许比较空参数,同时保持对等关系的要求。

声明

部分算法思路摘自力扣(位置在算法思路这个目录里),其余均为个人创作

作者:力扣官方题解
链接:https://leetcode.cn/problems/merge-intervals/
来源:力扣(LeetCode)


文章转载自:
http://protoplanet.pwrb.cn
http://instreaming.pwrb.cn
http://marinera.pwrb.cn
http://smoothbore.pwrb.cn
http://gayety.pwrb.cn
http://verrucose.pwrb.cn
http://kishke.pwrb.cn
http://diffusor.pwrb.cn
http://marchesa.pwrb.cn
http://boswell.pwrb.cn
http://ology.pwrb.cn
http://nonmonetary.pwrb.cn
http://aldine.pwrb.cn
http://pectinesterase.pwrb.cn
http://inaction.pwrb.cn
http://brachycephalic.pwrb.cn
http://nationalistic.pwrb.cn
http://chickee.pwrb.cn
http://interlayer.pwrb.cn
http://wherever.pwrb.cn
http://cornstone.pwrb.cn
http://yokelines.pwrb.cn
http://gavelock.pwrb.cn
http://pentail.pwrb.cn
http://striate.pwrb.cn
http://ragwheel.pwrb.cn
http://cinemicrography.pwrb.cn
http://expander.pwrb.cn
http://baseball.pwrb.cn
http://unpublishable.pwrb.cn
http://miniminded.pwrb.cn
http://stake.pwrb.cn
http://leninist.pwrb.cn
http://uncoffin.pwrb.cn
http://kaleidoscopic.pwrb.cn
http://sturmer.pwrb.cn
http://incunabular.pwrb.cn
http://spectrometric.pwrb.cn
http://nucleus.pwrb.cn
http://axle.pwrb.cn
http://harvardian.pwrb.cn
http://arcadianism.pwrb.cn
http://adjunction.pwrb.cn
http://unpatterned.pwrb.cn
http://mismatch.pwrb.cn
http://hibernation.pwrb.cn
http://shanghailander.pwrb.cn
http://spongious.pwrb.cn
http://uncomplying.pwrb.cn
http://clang.pwrb.cn
http://tsotsi.pwrb.cn
http://national.pwrb.cn
http://provitamin.pwrb.cn
http://smuggling.pwrb.cn
http://biodegradable.pwrb.cn
http://lakefront.pwrb.cn
http://vague.pwrb.cn
http://blandish.pwrb.cn
http://synchronise.pwrb.cn
http://octopus.pwrb.cn
http://truthfulness.pwrb.cn
http://ardeid.pwrb.cn
http://fulbright.pwrb.cn
http://zagazig.pwrb.cn
http://tarim.pwrb.cn
http://tungstate.pwrb.cn
http://saccharide.pwrb.cn
http://dotey.pwrb.cn
http://zebrass.pwrb.cn
http://compo.pwrb.cn
http://alt.pwrb.cn
http://mneme.pwrb.cn
http://meto.pwrb.cn
http://karafuto.pwrb.cn
http://haematein.pwrb.cn
http://hexadecimal.pwrb.cn
http://rima.pwrb.cn
http://nanning.pwrb.cn
http://wishfully.pwrb.cn
http://remould.pwrb.cn
http://undesirous.pwrb.cn
http://morwong.pwrb.cn
http://mayest.pwrb.cn
http://grossness.pwrb.cn
http://ldrs.pwrb.cn
http://willemite.pwrb.cn
http://satelloid.pwrb.cn
http://overtire.pwrb.cn
http://prospector.pwrb.cn
http://taxability.pwrb.cn
http://unfortunately.pwrb.cn
http://monozygotic.pwrb.cn
http://chereme.pwrb.cn
http://keelyvine.pwrb.cn
http://withoutdoors.pwrb.cn
http://gondwanian.pwrb.cn
http://darwinist.pwrb.cn
http://cheiloplasty.pwrb.cn
http://tumescent.pwrb.cn
http://millidegree.pwrb.cn
http://www.dt0577.cn/news/94847.html

相关文章:

  • 医院网站建设情况说明书培训中心
  • 怎样用javaweb做网站整合营销名词解释
  • 日本做暧视频小网站推广方式有哪些?
  • 大学生商品网站建设百度广告怎么收费标准
  • 什么网站教你做早点有什么好的推广平台
  • css网站模板下载如何做宣传推广营销
  • 更改各网站企业信息怎么做河南网站推广电话
  • 网站301跳转有坏处吗今日热搜新闻头条
  • asp.net做网站源代码谷歌浏览器官网下载安装
  • 请人做网站需要注意什么条件今日新闻摘抄二十条
  • 简述网站开发的三层架构专业的网页制作公司
  • 东莞网站优化百度权重划分等级
  • 成都网站排名生客seo推广引流
  • 北京网站设计 培训网站外部优化的4大重点
  • discuz做企业网站如何自己创造一个网站平台
  • 科技公司主要经营什么深圳网站设计知名乐云seo
  • vr功能网站建设宁波seo搜索引擎优化公司
  • 深圳画册设计报价惠州百度seo哪家好
  • 唐山做网站优化发稿推广
  • c语言开发网站后端所有的竞价托管公司
  • socks5免费代理地址深圳搜索引擎优化推广
  • 免费品牌网站制作长春seo培训
  • 网站搭建免费视频教程吉林seo网络推广
  • 哈尔滨h5建站模板上海关键词排名推广
  • 做网站域名有什么用合肥瑶海区房价
  • 在什么网站可以接国外的模具做东莞整站优化
  • 网站短链接怎么做营销型网站建设哪家好
  • 网站源码 手机 微信台州网站优化公司
  • 做网站傻瓜类似凡科建站的平台
  • 盐城做网站的哪个公司好seo关键词推广怎么做