チョークの補充が必要な学生番号を見つけます

クラスにはという番号が付けられたn生徒がいます各生徒は順番に質問に答えます。番号を持った生徒が最初に答え、次に番号を持った生徒が、というように番号を持った生徒が現れるまで答えます。その後、教師は番号を持った生徒から始めてこのプロセスを繰り返します。番号を入力して再度質問に答えてください。0n - 101n - 10

と integerで始まるn添字が付いた長さの0整数の配列が与えられます最初、チョーク箱には合計チョークが入っていました。番号が付けられた生徒が質問に答えると、チョークを消費します。残りのチョークの量が厳密に より少ない場合、生徒はチョークを補充する必要がありますchalkkkichalk[i] chalk[i]i

追加のチョークが必要な学生のID 番号を返却してください

例 1:

入力: チョーク = [5,1,5]、k = 22
出力: 0
説明: 生徒は次のようにチョークを消費します: 
- 生徒番号 0 はチョークを 5 個使用し、k = 17 になります。
- 生徒番号 1 はチョークを 1 個使用するため、k = 16 となります。
- 生徒番号 2 はチョークを 5 本使用するため、k = 11 となります。
- 生徒番号 0 はチョークを 5 本使用するため、k = 6 となります。
- 生徒番号 1 はチョークを 1 個使用するため、k = 5 となります。
- 生徒番号 2 はチョークを 5 本使用するため、k = 0 となります。
生徒番号 0 はチョークが足りないので、さらにチョークが必要です。

例 2:

入力: チョーク = [3,4,1,2]、k = 25
出力: 1
説明: 生徒は次のようにチョークを消費します: 
- 生徒番号 0 はチョークを 3 個使用し、k = 22 となります。
- 生徒番号 1 はチョークを 4 本使用するため、k = 18 となります。
- 生徒番号 2 はチョークを 1 個使用するため、k = 17 となります。
- 生徒番号 3 はチョークを 2 個使用するため、k = 15 になります。
- 生徒番号 0 はチョークを 3 本使用するため、k = 12 になります。
- 生徒番号 1 はチョークを 4 本使用するため、k = 8 となります。
- 生徒番号 2 はチョークを 1 つ使用するため、k = 7 となります。
- 生徒番号 3 はチョークを 2 本使用するため、k = 5 になります。
- 生徒番号 0 はチョークを 3 本使用するため、k = 2 になります。
生徒番号 1 はチョークが足りないので、さらにチョークが必要です。

コードは以下のように表示されます。

class Solution {
public:
    int chalkReplacer(vector<int>& chalk, int k) {
        int sum=0;//记录数组的数字总和
        int n=chalk.size();//记录数组长度
        for(int i=0;i<n;i++)
        {
            sum+=chalk[i];//将数组中的数字都加在一起
            if(sum>k)//当sum>k时,返回当前数字
            {
                return i;
            }
        }
        int remain=k%sum;//因为是循环的使用数字,所以只用取余数求最后一轮的结果即可
        for(int i=0;i<n;i++)
        {
            if(remain<chalk[i])//当remain<chalk[i]时,说明此编号的学生没有足够的粉笔
            {
                return i;//返回当前此学生的编号
            }
            remain-=chalk[i];
        }
        return -1;//寻找失败
    }
};

おすすめ

転載: blog.csdn.net/m0_62379712/article/details/131974004