補leetcode 10月28號的每日一題給你乙個整數陣列
arr
,請你幫忙統計陣列中每個數的出現次數。
如果每個數的出現次數都是獨一無二的,就返回true
;否則返回false
。
示例 1:
輸入:arr = [1,2,2,1,1,3]
輸出:true
解釋:在該陣列中,1 出現了 3 次,2 出現了 2 次,3 只出現了 1 次。沒有兩個數的出現次數相同。
示例 2:
輸入:arr = [1,2]
輸出:false
示例 3:
輸入:arr = [-3,0,1,-3,1,1,1,-3,10,0]
輸出:true
第一步都是要先計算每個數出現的次數。後面的只需要判斷這個出現次數的陣列中元素是否有重複的即可。
方法一 :利用陣列儲存每個數出現的次數
分析:
根據提示-1000 <= arr[i] <= 1000
,我們可以用桶的思想,構建2001個桶(長度為2001的陣列),然後遍歷給出的陣列,每出現乙個數,就往對應的桶裡扔乙個旗子,這樣就可以統計陣列中每個數的出現次數。 然後我們排除沒有旗子的桶,將每個桶裡的旗子數量set集合裡放,因為set集合裡的元素不能重複,如果有存放失敗的就說明前面存過這個元素了,即每個數的出現次數存在相同的,就返回false。
ps:哈哈哈,畫的好醜,手動狗頭
注意:陣列的下標只能從零開始,而-1000 <= arr[i] <= 1000
,所以counts[1000 + arr[i]]++
,這裡加1000處理。
上**:
class
solution
setset =
newhashset
<
>()
;for
(int val : counts)}}
return
true;}
}
提交結果
這。。。記憶體消耗,12%。。。emmm~。
方法二: 利用hashmap儲存每個數出現的次數:
來自題解區:
getordefault(object key, v defaultvalue),意思就是當map集合中有這個key時,就使用這個key對應的value值,如果沒有就使用預設值defaultvalue
找到每個數出現的次數之後,把出現次數的陣列放到集合set中,如果有重複的就會不會存進set,那麼set的大小肯定和出現次數的陣列長度不一樣。否則如果沒有重複的,他們的長度肯定是一樣的。
class
solution
return map.
size()
==new
hashset
<
>
(map.
values()
).size();}}
提交結果 LeetCode刷題筆記 37 數獨問題
leetcode原題位址 乙個數獨的解法需遵循如下規則 數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。空白格用 表示。輸入 輸出 解數獨本質上就是填入乙個數字,判斷是否滿足條件,不行就換下乙個數字。這就很像回溯...
leetcode刷題(陣列)14 有效的數獨
判斷乙個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。數字 1 9 在每一行只能出現一次。數字 1 9 在每一列只能出現一次。數字 1 9 在每乙個以粗實線分隔的 3x3 宮內只能出現一次。上圖是乙個部分填充的有效的數獨。數獨部分空格內已填入了數字,空白格用 表示。c...
刷題 搜尋 新數獨
很暴力的搜尋,還沒有什麼剪枝.心得 如果只查詢和修改,用bool比bitset快 rnt在迴圈中會比int快 減少簡單的函式呼叫 include include include include define rnt register int using namespace std int ans 1...