循环以检查数组中是否只有一个元素与其余元素不同

时间:2017-03-10 17:02:39

标签: loops iteration

假设我有一组Ball个对象,其中每个球都是红色,蓝色或绿色,Ball.getColour()返回球的颜色。我想检查一下,阵列中的所有球都是相同的颜色。我怎么能在一次数组传递中做到这一点?

1 个答案:

答案 0 :(得分:0)

我会建立另一种按颜色计算球的结构。

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计数的索引)来避免。