2022-08-20:给定区间的范围[xi,yi],xi<=yi,且都是正整数,
找出一个坐标集合set,set中有若干个数字,
set要和每个给定的区间,有交集。
求set的最少需要几个数。
比如给定区间 : [5, 8] [1, 7] [2, 4] [1, 9],
set最小可以是: {2, 6}或者{2, 5}或者{4, 5}。

答案2022-08-20:

生成事件,排序,遍历事件获得结果。

代码用rust编写。代码如下:

use std::collections::HashSet;
fn main() {
let mut arr: Vec<Vec<i32>> = vec![vec![5, 8], vec![1, 7], vec![2, 4], vec![1, 9]];
let ans1 = min_set(&mut arr);
println!("ans1 = {}", ans1);
} fn min_set(ranges: &mut Vec<Vec<i32>>) -> i32 {
let n = ranges.len() as i32;
// events[i] = {a, b, c}
// a == 0, 表示这是一个区间的开始事件,这个区间结束位置是b
// a == 1, 表示这是一个区间的结束事件,b的值没有意义
// c表示这个事件的时间点,不管是开始事件还是结束事件,都会有c这个值
let mut events: Vec<Vec<i32>> = vec![];
for i in 0..n << 1 {
events.push(vec![]);
for _ in 0..3 {
events[i as usize].push(0);
}
}
for i in 0..n {
// [3, 7]
// (0,7,3)
// (1,X,7)
events[i as usize][0] = 0;
events[i as usize][1] = ranges[i as usize][1];
events[i as usize][2] = ranges[i as usize][0];
events[(i + n) as usize][0] = 1;
events[(i + n) as usize][2] = ranges[i as usize][1];
}
events.sort_by(|a, b| a[2].cmp(&b[2]));
// 容器
let mut tmp: HashSet<i32> = HashSet::new();
let mut ans = 0;
for event in events.iter() {
if event[0] == 0 {
tmp.insert(event[1]);
} else {
if tmp.contains(&event[2]) {
ans += 1;
tmp.clear();
}
}
}
return ans;
}

执行结果如下:


左神java代码

2022-08-20:给定区间的范围[xi,yi],xi<=yi,且都是正整数, 找出一个坐标集合set,set中有若干个数字, set要和每个给定的区间,有交集。 求set的最少需要几个数。 比如给的更多相关文章

  1. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。

    题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...

  2. C语言:找出一个大于给定整数m且紧随m的素数,-求出能整除x且不是偶数的数的个数,

    //函数fun功能:找出一个大于给定整数m且紧随m的素数,并作为函数值返回. #include <stdlib.h> #include <conio.h> #include & ...

  3. 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数

    1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...

  4. 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数

    题目: 输入一个数字n  如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数  写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...

  5. 2022.02.20 SA

    2022.02.20 SA 如果我还能看见明天黎明,如果我还能再爬起来,我仍会走我的路,哪怕这条路已经荒废许久,也许我们无法拥有感情,我们甚至无法像个正常人一样接受太阳的洗礼,但是我依然会执行我的条约 ...

  6. http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

    http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

  7. 找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数。(数位DP)

    题目:找出区间[A, B]内所有数字的奇数字位出现次数为偶数,偶数字位出现次数为计数的数的个数. 分析:这道题的状态同样不好取,因为要求每一个奇数的个数都要为偶数,每一个偶数的位数都要为奇数,又因为只 ...

  8. VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt

    VB6查看桌面分辨率和工作区大小 2022.08.22 name.vt Form1 内代码如下: ' 2022年8月22日 15时15分 ' 作者:name.vt Private Sub cmdCle ...

  9. 求N!末尾的0的个数(找规律+递归)

    0\'s Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 计算整数n!(n的阶乘)末尾有多少个0. 输入 第一行输入一个数T代 ...

  10. [LeetCode] 871. Minimum Number of Refueling Stops 最少的加油站个数

    A car travels from a starting position to a destination which is target miles east of the starting p ...

随机推荐

  1. windows系统下使用java语言,在mysql数据库中做定时数据备份、删除

    有这样一个业务需求,需要将数据归档的表每月定时备份,并且删除之前表中的数据,话不多说,直接上代码! 注意:这种方法适合数据量小,业务要求不高的场景! 项目采用SpringBoot  + MyBatis ...

  2. 白鹭egret 控制屏幕方向

    this.stage.orientation=fangxiang; fangxiang值: portrait landscape auto

  3. 样例1-http接口的waiting(TTFB)时间从5.5s优化为100ms

    问题 :如何解决网页响应慢,waiting(TTFB)时间过长,接口返回耗时等问题? 首先需要了解什么是Waiting (TTFB) 时间?TTFB 是Time to First Byte 的缩写,指 ...

  4. 对利用jsp模板编写登录、注册界面的方法言

    使用模板的相关操作步骤详解 1.可以在相关的网站上面找相关的css或者js文件,下载到一个特定的文件夹里面,以备使用 2.然后,将存有相关代码的文件夹直接复制粘贴到web文件下,就会直接保存,可以根据 ...

  5. 在CentOS上编译最新版linux内核(linux-5.19.9)

    从官网下载最新版的Linux内核源码,本教程使用linux-5.19.9进行编译. 实验环境(CentOS-Stream-8) $ uname -a Linux localhost.localdoma ...

  6. springboot--多环境启动

    法一: 法二:

  7. Python学习之爬虫

    又被老师要求去搞Python ,曰,,下午回顾了一下Python的基础知识,写了个爬取图片的程序,在此做个分享吧.不喜勿喷 import requests import time from bs4 i ...

  8. 抽象同步队列AQS原理和实践

    AQS简述 AQS是一个FIFO的双向队列,队列元素类型为Node(也就是Thread).AQS有一个state属性,ReentrantLock可以用来便是当前线程获取锁的可重入次数:对于samaph ...

  9. 爬取JSON文件并且存储

    思路 1 先调用模块 2 定义一个函数 2.1 获取网址(点击评论 找到JSON的文件(分析评论preview)获取Request URL后面的地址) 2.2 添加用户的请求头 2.3 使用get方法 ...

  10. 西瓜视频的li绑定容器 踏坑之旅

    一定要绑定key,不然会出现一个li里面渲染出两个video标签