如何使用java以更少的运行时间有效地解决这个问题?
我尝试使用集合,但需要更长的时间。
新来的化学老师非常严格,希望学生在课堂上取得好成绩。为了帮助这一点,每个章节的讲座将在整个学期定期重复。每堂课都会介绍下一章。当他们读完书的末尾时,讲座将从第 0 章开始。更正式地说,如果书中有 numChapters,那么在第 i 天,讲座将从第 0 章开始 1%num章节。第一天上课是class[0],第一章是第0章。如果有3章,那么每天的讲座都是在章节class = [0, 1, 2, 0, 1, 2, ...]。在班级[4],讲座将在第 4%3 = 1 章进行。 一名学生要缺课参加婚礼,老师担心缺课。考虑到学生缺课的第一天和最后一天,确定学生缺课的章节数。 例如,书中有 numChapters = 4 章。学生从 b = 3 天开始到 e = 5 结束天离开课堂。该系列讲座的章节为 class = [0, 1, 2, 3, 0, 1, 2, 3,...] 开始从第 0 天开始。对于班级 [3] 到班级 [5],将进行第 3、0 和 1 章的讲座。学生将错过 3 章的讲座。 功能说明 在下面的编辑器中完成函数missedLectures。该函数必须返回一个整数。 错过的讲座具有以下参数: numChapters:一个整数 b:一个整数 e:整数
以下是我尝试过的方法。
public static int missedLectures(int numChapters, int b, int e) {
ArrayList<Integer> classes = new ArrayList<>();
// assuming the number of Lectures to some random value
int noOfLectures = numChapters * (b + e);
// getting chapter pattern [0,1,2,3,0,1,2,3...]
for (int i = 0; i < noOfLectures; i++) {
classes.add(i % numChapters);
}
// finding missed classes
return (int) classes.subList(b, e + 1).stream().distinct().count();
}`
实际上你根本不需要arraylist。
简单直观的答案: 仅在 numChapter 天后才会重复章节
因此,如果学生缺勤的天数小于 numChapter, 那么答案是 number_of_days
否则他会错过所有章节至少一次,那么答案是numChapters
public static int missedLectures(int numChapters, int b, int e) {
int num_of_days = e-b+1;
if(num_of_days<numChapters)
return num_of_days;
else
return numChapters;
}