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

tint-k主题做企业网站云seo

tint-k主题做企业网站,云seo,重庆打卡景点排行榜,seo推广分析905. 区间选点 思路 (贪心)O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间,如果当前区间左端点不包含在前一个区间中,则选取新区间,所选点个数加1,更新当前区间右端点。如果包含,则跳…

905. 区间选点

在这里插入图片描述

思路

(贪心)O(nlogn)

根据右端点排序

  1. 将区间按右端点排序

  2. 遍历区间,如果当前区间左端点不包含在前一个区间中,则选取新区间,所选点个数加1,更新当前区间右端点。如果包含,则跳过。

  3. 输出所选点的个数。

举例: 为什么不能根据左端点排序呢?

如下图所示,有三个区间

image-20240303163626866

我们按右侧排序是如图所示,l3 > r2,点数加1,更新右端点,l1 < l3,无需更新,直接跳过

image-20240303163819975

如果改成按左侧排序的话,r2 < r1 && r3 < r1,无需更新所需点数,输出点数为1(错误)。

  • 第一个区间为l1~r1, 当我们遍历到l2~r2的时候,没有问题,l2 < r1, 无需更新。
  • 但当我们遍历到l3~r3这个区间的话,就出现问题了,l3 < r1, 无需更新
  • 输出点数1

image-20240303163626866

解决办法 :在遍历其他区间的时候,同时更新区间右端点取最小值

Java代码

import java.util.*;
class Range implements Comparable<Range>{int l,r;public Range(int l,int r){this.l = l;this.r = r;}public int compareTo(Range o){return Integer.compare(r,o.r);//return this.r - o.r;}
}
public class Main{static int N = 100010,INF = 0x3f3f3f3f,n;static Range[] range = new Range[N];//结构体创建数组需要定义成全局变量public static void main(String[] args){Scanner scan = new Scanner(System.in);n = scan.nextInt();for(int i = 0 ; i < n ; i ++ ){int l = scan.nextInt();int r = scan.nextInt();range[i] = new Range(l,r);}//结构体排序Arrays.sort(range,0,n); //Arrays.sort(range, 0, n, (o1, o2) -> o1.r - o2.r);int res = 0;//表示一共需要多少点int ed = -INF; // 上一个点的右端点for(int i = 0 ; i < n ; i ++ ){if(range[i].l > ed){res ++ ;ed = range[i].r;}}System.out.println(res);}
}

根据左端点排序


import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();List<Pair> v = new ArrayList<>();for(int i = 0; i < n; i ++) {int l = sc.nextInt();int r = sc.nextInt();v.add(new Pair(l, r));}Collections.sort(v, (a, b) -> a.x - b.x);int l = Integer.MIN_VALUE;int r = Integer.MIN_VALUE;int res = 0;for(Pair p : v) {if(p.x <= r) {// l = Math.max(l, p.x);r = Math.min(r, p.y);   (每次取r的最小值,本质上其实还是根据右端点进行排序)} else {res += 1;l = p.x;r = p.y;}}System.out.println(res);}}class Pair implements Comparable<Pair> {int x;int y;public Pair(int x, int y) {this.x = x;this.y = y;}@Overridepublic int compareTo(Pair o) {return Integer.compare(this.x, o.x);}
}

正确性证明

定义:Ans 为所有可行方案中所需点最小数量,Cnt为当前方案中所需点的数量(一种可行方案)

  1. 为证明 Ans == Cnt ,我们只需证明 Ans >= Cnt , Ans <= Cnt即可。

  2. 既然Ans为最小数量,易得Ans <= Cnt。

  3. 由于我们是根据右端点进行排序遍历,举一个极端例子,由图可知,Cnt等于4,Ans >= 4。

  4. Ans >= Cnt &&Ans <= Cnt -> Ans = Cnt。

image-20240303172529134

http://www.tj-hxxt.cn/news/73646.html

相关文章:

  • 免费网络短剧百度广告优化
  • 淘宝这种网站怎么做的今日头条新闻最新消息
  • 广西建设主管部门网站seo综合查询怎么进入网站
  • wordpress theme url优化seo
  • 搜狗怎么做网站关键词排名软件官网
  • 300500启迪设计福州百度网站快速优化
  • b2b外贸网站建站短链接生成
  • 电子商务网站建设的建议seo优化网络推广
  • 大连网站外包网络推广公司主要做什么
  • 网站建设案例咨询品牌推广平台
  • 电子商务网站建设的过程和步骤seo网站推广助理
  • 建设网站的英语怎么说数据统计网站有哪些
  • 网站建设郑州软件推广平台
  • 找南昌兼职做网站的网上推广产品怎么做
  • 成都 做网站 模版整合营销传播
  • 为企业做网站优化大师百科
  • 在线ui设计网站怎么去推广一个app
  • 鄂州吧seo外链优化培训
  • 北京app开发公司排名郑州百度推广seo
  • 娄底网站seo网络营销推广方案策划与实施
  • 仙桃做网站的公司有哪些seo点击排名软件哪里好
  • 建湖人才网最新招聘龙岩seo
  • 阿里巴巴批发网站叫什么百度快照下载
  • 网站常用的字体哪个公司要做网络推广
  • 网络规划设计师教程第三版云盘下载杭州seo公司
  • 与企业网站做接口seo深度优化公司
  • 做app网站的软件叫什么域名被墙污染查询
  • 我的校园网站制作谷歌seo快速排名软件首页
  • 服装网站建设教程关键字是什么意思
  • 西安网站seo分析百度普通收录