leetcode 697 陣列的度

2021-10-05 13:49:20 字數 1701 閱讀 6154

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

//一直更新x值對應的right,迴圈結束後就是x值的最右位置

right.

put(x, i)

; count.

put(x, count.

getordefault

(x,0)+

1);//count記錄x值出現的次數

當有這個key時,就使用這個key值,如果沒有就使用預設值defaultvalue即0

}int ans = nums.length;

int degree = collections.

max(count.

values()

);//找到count裡的最大值

for(

int x: count.

keyset()

)}return ans;

}}

以上官方解法,其中一部分自己寫的做法

class

solution

//得到陣列的度,得到具體的最大次數是多少

int maxcount =0;

for(

int key : countmap.

keyset()

)if(maxcount ==1)

return1;

//找出出現頻率最高的數 可能不止乙個

list

maxnums =

newarraylist

<

>()

;for

(int key : countmap.

keyset()

)// 最小的陣列,它至少得剛好包括出現頻率最高的數

int minlength = nums.length;

for(

int num : maxnums)

}int end =0;

for(

int j = start +

1, remain = maxcount -

1; j < nums.length; j++)}

minlength = math.

min(end - start +

1, minlength);}

return minlength;

}}

Leetcode 697 陣列的度

題目 給定乙個非空且只包含非負數的整數陣列 nums,陣列的度的定義是指數組裡任一元素出現頻數的最大值。你的任務是找到與 nums 擁有相同大小的度的最短連續子陣列,返回其長度。示例 1 輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面...

LeetCode697 陣列的度

給定乙個非空且只包含非負數的整數陣列nums,陣列的度的定義是指數組裡任一元素出現頻數的最大值。你的任務是找到與nums擁有相同大小的度的最短連續子陣列,返回其長度。示例 1 輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面擁有相同度的...

LeetCode 697 陣列的度

給定乙個非空且只包含非負數的整數陣列 nums,陣列的度的定義是指數組裡任一元素出現頻數的最大值。你的任務是找到與 nums 擁有相同大小的度的最短連續子陣列,返回其長度。示例輸入 1,2,2,3,1 輸出 2 解釋 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2.連續子陣列裡面擁有相同度的...