贪心(基础算法)--- 区间选点

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.mzph.cn/news/717193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的算法

查找算法 基本查找 package MyApi.search;public class a01BasicSearchdemo01 {public static void main(String[] args) { int[] arr{131,127,147,81,103,23,7,79}; int number82;System.out.println(BasicSearch(arr,number));}public static boolean BasicSearch(int[] ar…

Java二叉树(1)

&#x1f435;本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前&#xff0c;先了解一下什么是树&#xff1a;树是一种非线性结构&#xff0c;其由许多节点和子节点组成&#xff0c;整体形状如一颗倒挂的树&#xff0c;比如下图&#xff1…

给nginx部署https及自签名ssl证书

一、生成服务器root证书 openssl genrsa -out root.key 2048 openssl req -new -key root.key -out root.csr#Country Name (2 letter code) [XX]:---> CN#Country Name (2 letter code) [XX]:---> CN#State or Province Name (full name) []:---> Shanghai#Locality…

多层感知机 + 代码实现 - 动手学深度学习v2 | 李沐动手学深度学习课程笔记

感知机 感知机≈二分类问题 感知机和其他问题的对比 训练感知机 如果小于等于零&#xff0c;说明预测错啦 &#xff0c;其实就是同号为正&#xff0c;异号为负 举个分类的例子 增加样本&#xff0c;改变分类线 继续分类 感知机的收敛定理 XOR问题 XOR问题其实就是第1、3象限数…

【踩坑】一条指令解决torch_scatter等安装报错安装不上问题

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 背景说明 (推荐方法)解决方法一&#xff1a;使用conda安装。 解决方法二&#xff1a;指定pip的网站。 解决方法三&#xff1a;直接去下载whl文件。 (终极方法)解决方法四&#xff1a;配置MSVC 特殊情况…

Linux系统运维脚本:扫描主机上多个端⼝状态

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执…

构建 ESLint 内存泄露检测插件入门:提升代码质量与防范运行时风险

前言 本文目的是介绍如何创建开发一个自定义规则 ESLint 插件。利用其能力,检测一些代码中可能存在的内存泄露并及时进行提示,避免潜在的后期影响。 本文实现其中一部分功能–检测事件监听器的使用是否存在内存泄露为例来演示基本的 ESLint 自定义规则插件开发的过程。用以…

nginx笔记整理

目录 一.Nginx基础介绍 二.nginx安装配置 三.Nginx配置文件 3.1nginx主配置文件(/etc/nginx/nginx.conf) 3.2默认的网站配置文件(/etc/nginx/conf.d/default.conf) 四.创建新的虚拟主机 五.Nginx日志 5.1nginx日志格式 5.2查看日志 5.3日志缓存(了解) 5.4日志轮转(/…

COMPOSER安装使用WIN下升级PHP-V

想用TP6使用phpspreadsheet但是说我PHP版本低&#xff0c;原来是PHP7.0 composer要求至少7.4 直接修改环境变量&#xff0c;把PHP目录切换到7.4 composer升级比较简单&#xff0c;在PHP目录下CMD然后官网的命令执行下即可 下面就可以在TP根目录下执行命令安装PHPSPREADSHEET…

sdbusplus:为connection绑定bus

基于前面对于sdbusplus的使用,可以看出,使用sdbusplus时可以通过bus完成method的调用,也可以通过connection完成方法的调用,比如: auto b = bus::new_default_user(); b.new_method_call(...); boost::asio::io_context io; auto conn = make_shared<sdbusplus::asio…

SpringBoot的基本了解

SpringBoot能广泛应用的原因 1:独立运行 Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器 中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。 2:简化配置 spring-boot-starter-web启动器自动…

Domain-Wall Memory Buffer for Low-Energy NoCs

目录 Domain-Wall Memory Buffer for Low-Energy NoCs主要工作DWM&#xff1a; Domain-wall memory磁畴壁存储器磁性纳米线阵列设计 开销分析实验设计实验结果分析 参考资料 Domain-Wall Memory Buffer for Low-Energy NoCs 主要工作 我们基于SRAM在NoC中使用的头尾指针概念&a…

2024年【道路运输企业主要负责人】考试报名及道路运输企业主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人考试报名根据新道路运输企业主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将道路运输企业主要负责人模拟考试试题进行汇编&#xff0c;组成一套道路运输企业主要负责人全真模拟考…

字符串匹配——烦人的KMP

相信很多同学看到这篇文章的时候&#xff0c;已经被KMP拿捏了吧&#xff01;KMP算法说难&#xff0c;倒也不是很难&#xff0c;手算都会&#xff0c;说不难吧&#xff0c;短短几行代码愣是看不懂&#xff0c;辗转反侧&#xff0c;翻书查阅&#xff0c;视频讲解&#xff0c;最后…

MySQL性能提升之道:深入探讨SQL与索引优化实战技巧

MySQL性能优化&#xff1a; MySQL性能优化是一个涉及多个层面的过程&#xff0c;旨在提高数据库的响应速度、处理能力和资源利用率。以下是一些关键的性能优化策略&#xff1a; 硬件优化&#xff1a; 升级硬件资源&#xff0c;如CPU、内存、SSD硬盘等&#xff0c;以提供更好的…

electron nsis 安装包 window下任务栏无法正常固定与取消固定 Pin to taskbar

问题 win10系统下&#xff0c;程序任务栏在固定后取消固定&#xff0c;展示的程序内容异常。 排查 1.通过论坛查询&#xff0c;应该是与app的api setAppUserModelId 相关 https://github.com/electron/electron/issues/3303 2.electron-builder脚本 electron-builder…

三、低代码平台-单据配置(单表增删改查)

一、业务效果图 主界面 二、配置过程简介 配置流程&#xff1a;业务表设计 -》业务对象建立-》业务单据配置-》菜单配置。 a、业务表设计 b、业务对象建立 c、业务单据配置 功能路径&#xff1a;低代码开发平台/业务开发配置/单据配置维护 d、菜单配置

linux-tar命令--exclude

命令如下&#xff1a;将workscript 压缩成workscript_v2.tar.gz&#xff0c;不打包workscript_v2目录下的logs下的所有文件。 tar -zcf workscript_v2.tar.gz workscript --excludeworkscript_v2/logs workscript_v2.tar.gz--压缩的文件名&#xff0c;可自定义 workscript--…

GCN原理回顾论文导读

Cora_dataset description Cora数据集是一个常用的学术文献用网络数据集&#xff0c;用于研究学术文献分类和图网络分析等任务。 该数据集由机器学习领域的博士论文摘要组成&#xff0c;共计2708篇论文&#xff0c;涵盖了7个不同的学科领域。每篇论文都有一个唯一的ID&#xf…

【Linux】linux内核模块编译makefile

1、编译进内核的模块 如果需要将foo.ko编译进内核&#xff0c;需要在makefile中进行配置&#xff1a; obj-y foo.o2、编译可加载的模块 如果需要将foo.ko编译成可加载模块&#xff0c;需要在makefile中进行配置&#xff1a; obj-m foo.oobj-m表示编译生成可加载模块。相对…