697 陣列的度 簡單

2022-01-18 08:56:56 字數 1957 閱讀 9402

題目**於力扣(leetcode)

目錄三、**實現

四、執行用時

五、部分測試用例

697. 陣列的度

定義map 記錄 nums 陣列中各元素出現的次數

遍歷 map,找到出現次數最大值的乙個或多個元素,元素儲存到 list 列表中

遍歷 list 列表,對於列表中的元素,通過左右指標方式遍歷 nums 陣列

找到 list 列表中各元素在 nums 陣列中的距離,並記錄下距離最小的長度

定義三個雜湊表,分別用於記錄 nums 陣列中各元素第一次出現的索引,最後一次出現的索引和出現的次數

遍歷 nums 陣列,記錄下各元素第一次出現的索引,最後一次出現的索引和出現的次數

操作記錄元素出現次數的 map,找到最多的出現次數

遍歷記錄元素出現次數的 map,當 map 值等於最多的出現次數時,獲取到第一次出現的索引和最後一次出現的索引,計算兩個索引間的距離,記錄下距離最小的長度

public static int findshortestsubarray(int nums) 

listlist = new arraylist<>();

int count = 0;

// 遍歷 map,找到出現次數最多的元素(可能有多個)

for (integer i : map.keyset())

// 出現較多次數的元素時

if (j > count)

list.add(i);

}// 陣列中各元素出現次數小於 2 時,return 1

if (count <= 1)

int len = nums.length;

for (integer i : list)

if (nums[right] != i)

// 最短的連續子陣列長度 = 最後一次出現的索引 - 第一次出現的索引 + 1

if (nums[left] == i && nums[right] == i) }}

return len;

}

public static int findshortestsubarray(int nums) 

// 右邊索引需要改變

rightmap.put(j, i);

// 出現每次加 1

countmap.put(j, countmap.getordefault(j, 0) + 1);

}// 獲取最大的出現次數

697 陣列的度

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

697 陣列的度

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

697 陣列的度

解題思路 最直觀最笨的方法 1.遍歷陣列,借助輔助陣列count,統計原陣列中每個元素出現的次數 2.根據count中元素額值,求出陣列的度 3.輔助二維陣列arr,初始值為 1,儲存陣列的度對應的元素的最小索引和最大索引 4.遍歷原陣列的元素,找到與nums擁有相同大小的度的最短連續子陣列,其長度...