自己用了一个比较笨的方法,也算是解出来了,效果还行,不过和大佬们的巧妙方法比起来就很笨拙了。
森林中的兔子
森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。
返回森林中兔子的最少数量。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rabbits-in-forest
解题思路
首先对answers 数组排序,接下来对其遍历:
- 如果该位置的元素等于 0 ,意味着该颜色的兔子只有这一只,即:res += 1 ;
- 如果该位置的元素不等于 0 且不等于前一个位置的元素,意味着该兔子和前一只的颜色不同,而属于该颜色的兔子则有 answers[i] + 1 只,即:res += (answers[i] + 1) ;
- 如果该位置的元素不等于 0 且等于前一个位置的元素(遍历时从第一次相等就开始计数),则有两种情况:
1、如果计数值等于该位置的颜色的兔子个数 answers[i] + 1 只,则意味着该颜色的兔子前面都说话了,那么计数就应该重新开始(代表另一种颜色),下一只兔子的answers[i] 即使和前面的相同,颜色却不同了;
2、如果计数值不等于该颜色的兔子的个数 answers[i] + 1 只,则意味着该位置的兔子和前面的兔子是一种颜色,则只需计数加一。
计数时初始化从1开始。
代码