方法一 模拟 队列循环
对于students[0]和sandwiches[0],如果它们相同就从两个数组中都删除第一个元素,进行下一次比较,如果他们不同,则把student第一个元素移到最后面去,再次进行比较,知道sandwiches[0]已经不存在在students数组里就可以结束循环,最后students数组的长度就是输出值。
var countStudents = function(students, sandwiches) {
while(students.indexOf(sandwiches[0])!=-1){
if(students[0]===sandwiches[0]){
students.shift()
sandwiches.shift()
}else{
students.push(students.shift())
}
}
return students.length
};
消耗时间和内存情况:
方法二 还是模拟
用s0记录students里0的数量,s1记录1的数量,碰到sandwiches[0]==0则s0-1,sandwiches[0]==1则s1-1,最后s0和s1的和就是剩下的学生数量
var countStudents = function(students, sandwiches) {
let s1 = _.sum(students);
let s0 = students.length - s1;
for (let i = 0; i < sandwiches.length; i++) {
if (sandwiches[i] === 0 && s0 > 0) {
s0--;
} else if (sandwiches[i] === 1 && s1 > 0) {
s1--;
} else {
break;
}
}
return s0 + s1;
};
消耗时间和内存情况: