我是靠谱客的博主 包容小猫咪,最近开发中收集的这篇文章主要介绍蓝桥杯算法训练-隐匿的刺客题目题解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

强大的kAc建立了强大的帝国,但人民深受其学霸及23文化的压迫,于是勇敢的鹏决心反抗。
  kAc帝国防守森严,鹏带领着小伙伴们躲在城外的草堆叶子中,称为叶子鹏。
  kAc帝国的派出的n个看守员都发现了这一问题,第i个人会告诉你在第li个草堆到第ri个草堆里面有人,要求你计算所有草堆中最少的人数,以商议应对。
  “你为什么这么厉害”,得到过kAc衷心赞美的你必将全力以赴。

题解

我不是来写题解的,我是来吐槽的。真是一个sb题目。或许出题人的算法水平是大学生,语文水平也就小学生。绕来绕去不知道要干什么。题目不做。代码看这个大哥的吧。虽然他的题解水平也有限。但最起码做出来。

隐匿的刺客题解

import java.util.*;
public class Main {
/**
* 内部类 ——> 草堆
* l ——> 左边界
* r ——> 右边界
*/
public static class Haystack {
public int l;
public int r;
public Haystack(int l, int r) {
this.l = l;
this.r = r;
}
public int getR() {
return r;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//n个看守员
int n = sc.nextInt();
//草堆集合
List<Haystack> haystacks = new ArrayList<>();
int l, r;
for (int i = 0; i < n; i++) {
l = sc.nextInt();
r = sc.nextInt();
haystacks.add(new Haystack(l, r));
}
//按 ri 排序(升序)
haystacks.sort(Comparator.comparing(Haystack::getR));
//记录 n 个区间的交集
List<Object> length = new ArrayList<>();
int minr, k;
while (haystacks.size() != 0) {
Haystack haystack = haystacks.get(0);
minr = haystack.r;
length.add(minr);
k = 0;
l = haystack.l;
while (minr >= l) {
k += 1;
if (k < haystacks.size()) {
l = haystacks.get(k).l;
} else {
minr = -1;
}
}
//因为要删除haystacks里面的多个值,所以会涉及到一个问题,就是当你删除掉下标为1的元素,
//原来下标为2的元素会自动改变自己的下标为1,后面的元素依次把自己的下标值减一
//鉴于这种情况,我们想循环删除haystacks中的多个元素的话,就必须从后往前删,这样保障了你删除了一个元素之后,
//haystacks中元素的下标移动不会影响到那些需要删除但是还未删除到的元素
// if (k > 0) {
//
haystacks.subList(0, k).clear();//subList() 方法用于截取并返回动态数组中的一部分。
// }代码等同for循环代码
for (int i = k - 1; i >= 0; i--) {
haystacks.remove(i);
}
}
System.out.println(length.size());
}
}

最后

以上就是包容小猫咪为你收集整理的蓝桥杯算法训练-隐匿的刺客题目题解的全部内容,希望文章能够帮你解决蓝桥杯算法训练-隐匿的刺客题目题解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部