解决黑客排名缺课质疑java

问题描述 投票:0回答:1

如何使用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();
    }`
java collections runtime
1个回答
0
投票

实际上你根本不需要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;
}
© www.soinside.com 2019 - 2024. All rights reserved.