題目連結:
題目意譯:
你被給定一整數陣列 nums,其由 2 × n 個整數所組成。
你需要將 nums 分成 n 對數字使得:
每個元素恰好屬於一個數對中。
同一對中的數字相同。
如果 nums 可以分為上述的 n 個數對,則回傳真(True);反之回傳假(False)。
限制:
nums.length == 2 × n
1 ≦ n ≦ 500
1 ≦ nums[i] ≦ 500
範例測資:
範例 1:
輸入: nums = [3,2,3,2,2,2]
輸出: true
解釋:
nums 中有 6 個元素,因此它們應分為 6 ÷ 2 = 3 對。
如果 nums 分成 (2, 2) 、 (3, 3) 和 (2, 2) 之數對,則其將滿足所有條件。
範例 2:
輸入: nums = [1,2,3,4]
輸出: false
解釋:
不可能可以把 nums 分成 4 ÷ 2 個數對使得所有條件都被滿足。
解題思維:
由於 nums[i] 最小為 1、最大到 500,因此我們直接統計 nums 中 1 ~ 500 每種數字各自的出現次數即可。而當有任何一種數字的出現個數不是偶數,則代表對於該種數字必定會需要與其他不同種的數字去配對,因此不滿足題目提及的條件,因此直接回傳假即可;反之如果不存在這樣種類的數字的話,則代表每個數字都可以成功配對,因此回傳真。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。