leetcode學習記錄32 697 陣列的度

2021-10-02 17:26:35 字數 2113 閱讀 4273

難度:簡單

給定乙個非空且只包含非負數的整數陣列 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範圍內的整數。

//方法一

class

solution

// 1、如果陣列就1個元素,陣列的度就是1,

// 2、包含這個度1的陣列長度的最小值,這個陣列長度本身了,就是這個1,因此返回1

if(nums.length ==1)

// map1用來統計陣列中每個元素出現的次數

// 比如題中:1 -> 2 (陣列中1出現了2次)

// 2 -> 2 (陣列中2出現了2次)

// 3 -> 1 (陣列中3出現了1次)

mapmap1 =

newhashmap

<

>()

;// map2用來記錄陣列中元素第一次出現時的位置(索引)

// 比如題中:1 -> 0 (陣列中1第一次出現的位置是0)

// 2 -> 1 (陣列中2第一次出現的位置是1)

// 3 -> 3 (陣列中3第一次出現的位置是3)

mapmap2 =

newhashmap

<

>()

;// map3用來記錄陣列相同元素,第一次出現與最後一次出現之間的長度

// 比如題中:元素1第一次出現的位置是0,最後一次出現的位置是4,它們之間的長度 = 5

// 元素2第一次出現的位置是1,最後一次出現的位置是2,它們之間的長度 = 3

// 元素3第一次出現的位置是3,最後一次出現的位置是3,它們之間的長度 = 1

mapmap3 =

newhashmap

<

>()

;for

(int i =

0; i < nums.length; i++

)// map3用來記錄陣列相同元素,第一次出現與最後一次出現之間的長度,key = 陣列元素, value = 第一次出現與最後一次出現之間的長度

// 陣列元素第一次出現的位置儲存在map2中,可以從裡面拿出來

map3.

put(nums[i]

,i - map2.

get(nums[i])+

1);}

// maxcount用來記錄陣列的度

int maxcount =0;

// map1中存了陣列元素的次數,將出現次數的最大值取出來,放到maxcount中

for(

int num : map1.

values()

)// minlength用來記錄最終的答案,儲存最短連續子陣列的長度,初始化為最大值

// minlength是用來儲存最小值的,將其初始化為最大值,才能不斷更新,得到更小的,再更新得到更小的,最終得到的是最小的

int minlength = integer.max_value;

for(

int key : map1.

keyset()

)}return minlength;}}

19/

LeetCode學習記錄(4 6)

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

LeetCode學習記錄(10)

給定乙個字串 s 和乙個字元模式 實現支援 和 的正規表示式匹配。匹配任意單個字元。匹配零個或多個前面的元素。匹配應該覆蓋整個字串 s 而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例 1 輸入 s aa p a 輸...

LeetCode學習記錄(5) 每日溫度

根據每日氣溫列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入0來代替。例如,給定乙個列表temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 氣溫列表長度的範圍是 1,30...