用java ,XP的表哥为他推荐了一些学习计算机编程的小视频,这些视频的播放时间长短不完全相同。现在给定一段时间,你能告诉XP他最多可以看多少个视频吗?每个视频的播放时间和给定的总时间均用分钟为单位。 输入 单组输入数据 第一行为m n m为给定时间长度(分钟)(0<n,m<=1000) n表示视频个数 接下来是n个整数代表每个视频的播放时间(每个视频播放时间为不超过1000的正整数) 输出 输出一个整数代表XP最多可以看的视频数。 样例输入 Copy 84 6 65 46 18 76 79 3 样例输出 Copy 3
时间: 2024-02-16 08:01:02 浏览: 61
【表哥】4s汽车城小程序8.1.0 前端 后端.rar
可以使用贪心算法来解决这个问题。我们可以将给定的视频列表按照播放时间从小到大排序,然后依次选择播放时间最短的视频,直到累计播放时间超过了给定的总时间。这样可以保证XP看的视频数量最多。
Java代码实现如下:
```java
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt(); // 给定时间长度
int n = scanner.nextInt(); // 视频个数
int[] times = new int[n]; // 视频播放时间列表
for (int i = 0; i < n; i++) {
times[i] = scanner.nextInt();
}
// 将视频播放时间列表按照从小到大排序
Arrays.sort(times);
int count = 0; // XP可以看的视频数量
int total = 0; // XP已经看过的视频总时间
for (int i = 0; i < n; i++) {
if (total + times[i] > m) {
break;
}
count++;
total += times[i];
}
System.out.println(count);
}
}
```
这个算法的时间复杂度为 $O(n \log n)$,其中 $n$ 是视频个数。排序需要 $O(n \log n)$ 的时间,后面的遍历需要 $O(n)$ 的时间。所以总的时间复杂度为 $O(n \log n)$。
阅读全文