[Swift]LeetCode781. 森林中的兔子 | Rabbits in Forest

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: http://www.javashuo.com/article/p-tfvdukla-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

In a forest, each rabbit has some color. Some subset of rabbits (possibly all of them) tell you how many other rabbits have the same color as them. Those answers are placed in an array.git

Return the minimum number of rabbits that could be in the forest.github

Examples:
Input: answers = [1, 1, 2]
Output: 5
Explanation:
The two rabbits that answered "1" could both be the same color, say red.
The rabbit than answered "2" can't be red or the answers would be inconsistent.
Say the rabbit that answered "2" was blue.
Then there should be 2 other blue rabbits in the forest that didn't answer into the array.
The smallest possible number of rabbits in the forest is therefore 5: 3 that answered plus 2 that didn't.

Input: answers = [10, 10, 10]
Output: 11

Input: answers = []
Output: 0

Note:數組

  1. answers will have length at most 1000.
  2. Each answers[i] will be an integer in the range [0, 999].

森林中,每一個兔子都有顏色。其中一些兔子(多是所有)告訴你還有多少其餘的兔子和本身有相同的顏色。咱們將這些回答放在 answers 數組裏。微信

返回森林中兔子的最少數量。spa

示例:
輸入: answers = [1, 1, 2]
輸出: 5
解釋:
兩隻回答了 "1" 的兔子可能有相同的顏色,設爲紅色。
以後回答了 "2" 的兔子不會是紅色,不然他們的回答會相互矛盾。
設回答了 "2" 的兔子爲藍色。
此外,森林中還應有另外 2 只藍色兔子的回答沒有包含在數組中。
所以森林中兔子的最少數量是 5: 3 只回答的和 2 只沒有回答的。

輸入: answers = [10, 10, 10]
輸出: 11

輸入: answers = []
輸出: 0

說明:rest

  1. answers 的長度最大爲1000
  2. answers[i] 是在 [0, 999] 範圍內的整數。

Runtime: 20 ms
Memory Usage: 19.3 MB
 1 class Solution {
 2     func numRabbits(_ answers: [Int]) -> Int {
 3         var res:Int = 0
 4         var m:[Int:Int] = [Int:Int]()
 5         for ans in answers
 6         {
 7             m[ans,default:0] += 1
 8         }
 9         for (key,val) in m
10         {
11             res += (val + key) / (key + 1) * (key + 1)
12         }
13         return res
14     }
15 }

24mscode

 1 class Solution {
 2     func numRabbits(_ answers: [Int]) -> Int {
 3         var counter = [Int: Int]()
 4         answers.forEach{ counter[$0, default: 0] += 1 }
 5         
 6         var ret = 0
 7         for (n, c) in counter {
 8             let colors = (c + n) / (n + 1)
 9             ret += colors * (n + 1)
10         }
11         return ret
12     }
13 }

24mshtm

 1 class Solution {
 2     func numRabbits(_ answers: [Int]) -> Int {
 3         if answers.count == 0 {
 4         return 0
 5     }
 6     
 7     let sortAns = answers.sorted()
 8     var first = -1
 9 
10     var total = 0
11     var sep = 0
12     
13     for (_, itemCount) in sortAns.enumerated() {
14         if itemCount != first || sep == first {
15             first = itemCount
16             sep = 0
17             
18             total += 1 + itemCount
19         } else {
20             sep += 1
21         }
22     }
23     return total
24     }
25 }

48msblog

 1 class Solution {
 2     func numRabbits(_ answers: [Int]) -> Int {
 3         var mark = [Int : Int]()
 4         for answer in answers {
 5             if let count = mark[answer] {
 6                 mark[answer] = count + 1
 7             } else {
 8                 mark[answer] = 1
 9             }
10         }
11         
12         var result = 0
13         for (key, value) in mark {
14             let groupNum = key + 1
15             var group = value / groupNum
16             if value % groupNum != 0 {
17                 group += 1
18             }
19             result += group * groupNum
20         }
21         return result
22     }
23 }
相關文章
相關標籤/搜索