LeetCode刷題 1207 獨一無二的出現次數

2021-10-10 02:55:11 字數 1947 閱讀 3091

補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...