クラスにはという番号が付けられたn
生徒がいます。各生徒は順番に質問に答えます。番号を持った生徒が最初に答え、次に番号を持った生徒が、というように番号を持った生徒が現れるまで答えます。その後、教師は番号を持った生徒から始めてこのプロセスを繰り返します。番号を入力して再度質問に答えてください。0
n - 1
0
1
n - 1
0
と integerで始まるn
添字が付いた長さの0
整数の配列が与えられます。最初、チョーク箱には合計チョークが入っていました。番号が付けられた生徒が質問に答えると、チョークを消費します。残りのチョークの量が厳密に より少ない場合、生徒はチョークを補充する必要があります。chalk
k
k
i
chalk[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;//寻找失败
}
};