Loops 循环检查数组中是否只有一个元素与其他元素不同
假设我有一个Loops 循环检查数组中是否只有一个元素与其他元素不同,loops,iteration,Loops,Iteration,假设我有一个Ball对象数组,其中每个球都是红色、蓝色或绿色,Ball.getColor()返回球的颜色。我想检查阵列中除了一个球以外的所有球是否都是相同的颜色。如何在数组的一次遍历中完成此操作?我将构建另一个按颜色计数球的结构 var countArray = [0, 0, 0] // the count of red, blue and green for each ball in ballArray { index = ball.mapColorToIndex() // (red
Ball
对象数组,其中每个球都是红色、蓝色或绿色,Ball.getColor()
返回球的颜色。我想检查阵列中除了一个球以外的所有球是否都是相同的颜色。如何在数组的一次遍历中完成此操作?我将构建另一个按颜色计数球的结构
var countArray = [0, 0, 0] // the count of red, blue and green
for each ball in ballArray {
index = ball.mapColorToIndex() // (red->0, green->1, blue->2)
countArray[index]++
}
countArray = countArray.sortAscending()
// array must now be of the form 0, 1, n where n is ballArray.count()-1
if (countArray[0]==0 && countArray[1]==1 && countArray[2]>1) {
// OP condition met
}
这概括了更多的颜色,但最好是按降序排序并检查数组末尾的..0,0,1,n
此外,随着颜色数量的增加,您最终将进行另一次排序数组遍历。(仅使用3种颜色,我们就可以编写O(1)排序)。这可以通过在第一个循环中保留指向您关心的条件的指针来避免(索引的计数为单数,索引的计数大于1)