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

网站建设图片手机中国建设银行官网站下载中心

网站建设图片手机,中国建设银行官网站下载中心,化妆品网页设计素材,石狮市Day 28 题目描述 思路 初次思路:借鉴一下昨天题解的思路,将插入的区间与区间数组作比较,插入到升序的数组中,其他的和(合并区间)做法一样。 注意需要特殊处理一下情况,插入区间比数组中最后一…

Day 28

题目描述

在这里插入图片描述

思路

初次思路:借鉴一下昨天题解的思路,将插入的区间与区间数组作比较,插入到升序的数组中,其他的和(合并区间)做法一样。
注意需要特殊处理一下情况,插入区间比数组中最后一个区间的起始点大,这种情况,在循环中不会计算到插入区间,单独处理一下。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> merged = new ArrayList<int[]>();if(intervals.length==0){//区间数组为空merged.add(new int[]{newInterval[0],newInterval[1]});return merged.toArray(new int[merged.size()][]);   }int start=0,end=0;for (int i = 0; i < intervals.length;i++) {if(newInterval[0]<intervals[i][0]) {//将插入区间到数组中start = newInterval[0];end = newInterval[1];newInterval[0] = intervals[i][0];newInterval[1] = intervals[i][1];i--;}else{start = intervals[i][0];end = intervals[i][1];}if(merged.size()==0||merged.get(merged.size()-1)[1]<start) {merged.add(new int[]{start, end});}else{merged.get((merged.size()-1))[1] = Math.max(merged.get(merged.size()-1)[1], end);}}if(newInterval[0]>=intervals[intervals.length-1][0]){//特殊处理一下if(merged.size()==0||merged.get(merged.size()-1)[1]<newInterval[0]) {merged.add(new int[]{newInterval[0], newInterval[1]});}else{merged.get((merged.size()-1))[1] = Math.max(merged.get(merged.size()-1)[1], newInterval[1]);}}return merged.toArray(new int[merged.size()][]);   }
}

问题:时间复杂度比较高,虽然通过了
做法:注意题目条件,给定的区间数组中的区间是不重叠的,那么我们需要插入一个新的区间,只需要找到这个与这个插入区间有重叠的区间,合并成一个大区间即可。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> res = new ArrayList<int[]>();if(intervals.length==0){//数组为空特殊处理res.add(new int[]{newInterval[0],newInterval[1]});return res.toArray(new int[res.size()][]);}int x=0;int start =newInterval[0],end=newInterval[1];//初始化for (int i = 0; i < intervals.length; i++) {if(intervals[i][1] <newInterval[0]) {//说明这个区间和新插入区间没有交集res.add(new int[]{intervals[i][0],intervals[i][1]});}else if(intervals[i][0] > newInterval[1]) {if(x==0){//由于数组是按照起始点的升序排列。证明插入的区间到这里已经找到最大的合并区间res.add(new int[]{start,end});x=1;}//说明这个区间和新插入区间没有交集res.add(new int[]{intervals[i][0],intervals[i][1]});}else{//扩大合并区间start=Math.min(start,intervals[i][0]);end=Math.max(end,intervals[i][1]);}}if(x==0){//排除特殊情况,即为数组中所有区间在插入这个区间后合并为一个大区间res.add(new int[]{start,end});}return res.toArray(new int[res.size()][]);}
}

题目描述

在这里插入图片描述

思路

首先我们来中翻中一下:这题所谓的最少数量的箭,可以理解为多个区间中的重叠的区间,所以这道题的目的是为了找到这个区间数组有几个重叠区间。
做法

  1. 将所有气球按照起始点升序进行排序
  2. 创建start和end,用来记录当前重合区间的范围(初始设置为第一个气球的范围),初始设置箭数sum为1。
  3. 从前向后遍历,由于此时气球是有序的,比较当前气球和重合范围(start,end)是否重合,也就是比较当前气球的起始点是否小于等于end(不比较start的原因在于是升序的,下一个气球的起始点一定比start大
  4. 如果小于等于end,说明气球在重合区间,需要更新重合区间(这里建议画图理解),更新看代码。
  5. 如果大于end,说明这个气球和之前的所有气球不能一箭射穿,就将箭数加1
    注意:箭初始设置为1,目的就是将与第一个气球有重合区间的所有气球都射穿,如果一个气球不在重合区间,就需要多一把箭。
class Solution {public int findMinArrowShots(int[][] points) {if(points.length==0){//为空特殊处理return  0;}int start=0,end=0,sum=1;Arrays.sort(points, new Comparator<int[]>() {//按照起始点进行升序排序public int compare(int[] interval1, int[] interval2) {return Integer.compare(interval1[0], interval2[0]);}});//排序start=points[0][0];end=points[0][1];for(int i=1;i<points.length;i++){if(points[i][0]<=end){//如果该区间的起始点比目前记录的区间结束点还小,说明有重合start=Math.max(start,points[i][0]);//修改区间的起始点end=Math.min(end,points[i][1]);//修改区间的结束点//这里就是收缩到目前的最小重合区间}else{//说明这个气球不在之前的重合区间,一箭射不爆sum++;//计数器加1 start=points[i][0];end=points[i][1];//将这个气球的范围作为新的区间}}return sum;}
}

文章转载自:

http://B02P0MCz.rfLcy.cn
http://RqVHHuDS.rfLcy.cn
http://md61eO7s.rfLcy.cn
http://DXmqwSaQ.rfLcy.cn
http://7TwoYImC.rfLcy.cn
http://tqUVZhAT.rfLcy.cn
http://1OHkBlA5.rfLcy.cn
http://LAIaUvBZ.rfLcy.cn
http://CyS00xrH.rfLcy.cn
http://ePsf8KeF.rfLcy.cn
http://DVG18U8X.rfLcy.cn
http://yyNy9Ao2.rfLcy.cn
http://hivOuwyK.rfLcy.cn
http://1yuLEDDD.rfLcy.cn
http://2VYmalsB.rfLcy.cn
http://RmQrX5Te.rfLcy.cn
http://dBFEKSkP.rfLcy.cn
http://wwdEkJx7.rfLcy.cn
http://kILvlXk9.rfLcy.cn
http://bgsdiYzT.rfLcy.cn
http://7MbWMeZY.rfLcy.cn
http://4ARheSZL.rfLcy.cn
http://zrpi0m47.rfLcy.cn
http://5SVKjnZp.rfLcy.cn
http://p2u0en2S.rfLcy.cn
http://FehC8okL.rfLcy.cn
http://QbYdf5jR.rfLcy.cn
http://aAPcYB2B.rfLcy.cn
http://UP4i6VhK.rfLcy.cn
http://UTKjUhwO.rfLcy.cn
http://www.dtcms.com/wzjs/764544.html

相关文章:

  • 动态和静态网站的区别怎样在文章后做网站链接
  • 网站开发去哪里找昆明网站运营
  • html学校网站模板进入公众号核酸检测
  • 电动车网站模板个人网站的版权怎么写
  • 如何开发wap网站公司网站申请
  • 众筹那些网站可以做合同管理软件
  • 安徽省新天源建设公司网站南京网站建设小程序开发 雷仁网络
  • 个人做旅游网站怎样冷门且好听的公司名字
  • 想建个网站网页定制哪家不错
  • 湖北网站建设搭建企业所得税5%的标准
  • 做淘推广的网站做外贸如何建网站
  • 用局域网建设网站企业网站推广哪个公司好
  • 网站开发的工作职责复刻手表网站
  • 上海网站设计公司企业网站seo优帮云
  • dede网站地图模板上海专业制作网站
  • 怎么做一网站首页wordpress 全文检索
  • 网站开发 q3687474网店卖什么最赚钱
  • 建设网站公司哪里好提供网站建设报价
  • 小说网站开发多少钱今天深圳新增确诊最新消息
  • 谷歌网站推广方案可以看辽宁经济频道的app
  • 判断网站开发语言广东建筑信息平台
  • 山东做网站公司阿里云 备案 网站服务内容
  • 微信网站开发公司电话微信如何绑定网站
  • app应用网站单页模板下载视觉比较好看的网站
  • 好看的手机网站模板免费下载呼伦贝尔网站建设公司
  • 访问不了网站目录中的网页做网站的网站源码
  • 哪家公司做移动网站增城企业网站建设
  • 网站建设周末培训国内设计公司前十名
  • 建设银行网站能不能注销卡广告建设网站
  • 建站哪家好wordpress国家商标注册查询网官网