leetcode刷題 陣列 陣列的度

2021-10-10 20:37:46 字數 1384 閱讀 5031

給定乙個非空且只包含非負數的整數陣列 nums, 陣列的度的定義是指數組裡任一元素出現頻數的最大值。

你的任務是找到與 nums 擁有相同大小的度的最短連續子陣列,返回其長度。

示例 1:

輸入: [1, 2, 2, 3, 1] 輸出: 2 解釋: 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.

連續子陣列裡面擁有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1,

2, 2], [2, 2, 3], [2, 2] 最短連續子陣列[2, 2]的長度為2,所以返回2.

示例 2:

輸入: [1,2,2,3,1,4,2] 輸出: 6

注意:nums.length 在1到50,000區間範圍內。 nums[i] 是乙個在0到49,999範圍內的整數。

讀懂題意,這裡是要找到乙個陣列裡出現最多的數的最小連續子陣列。

需要注意的是,這個陣列的每乙個出現的數字都要記錄其出現的次數。所以我們考慮使用到map來記錄每乙個數字出現的次數,key即為這個數字本身,value為其出現的次數。每當這個數字出現的時候,我們就給map使用put方法,讓map裡這個數字的出現次數+1。這是用於記錄數字出現次數的map。

此外還需要兩個map來記錄最早出現這個數字的位置和最後出現這個數字的位置。這兩個map的key都是這個數字,value為在陣列**現的位置。

class

solution

int ans = nums.length;

int degree = collections.

max(count.

values()

);for(

int x: count.

keyset()

)}return ans;

}}

**來自leetcode官方解答

**中的getordefault方法的作用是獲取map中指定key的value,如果這個key沒有value那麼就使用預設值。count.put(x,count.getordefault(x,0)+1);的含義就是給count這個map裡key為x的元素的value重新賦值現在的value+1的值,如果這個key還沒有value那就給使用預設值0來賦值。

collection.max(count.values());實際上就是獲取到了count這個map裡面value的最大值。

**最後遍歷記錄出現次數的map,只有該數字的出現次數是最多的時候才會進入判斷,如果這個數字的最小連續子陣列會比較小、那就賦值給ans

最後return的就是最小的連續子陣列

刷題(leetcode陣列相關)

1.兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路一.遍歷陣列中的每個數,與它後面每個數相加的結果是否等於target var t...

Leetcode刷題筆記(C ) 陣列

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...

LeetCode刷題之陣列複習

由於以後會從事嵌入式,所以這些題打算全部用c語言來完成。第一題 從排序陣列中刪除重複項。示例 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1,2 你不需要考慮陣列中超出新長度後面的元素。做陣列題一定優先考慮雙指標法 答案 這裡雖然沒使用指標,...