資料結構 11 爬樓梯

2021-10-23 16:53:02 字數 1721 閱讀 6908

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

解題思路:

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 = new hashmap<>();

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

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

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

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

mapmap2 = new hashmap<>();

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

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

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

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

mapmap3 = new hashmap<>();

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;}}

資料結構與演算法 12爬樓梯

description 爬樓梯的時候,設每次可以上一級台階或者兩級台階,計算上 n 級台階的方案數。input 輸入包含多組測試資料,對於每組測試資料 輸入只有一行為乙個正整數 n 1 n 50 output 對於每組測試資料,輸出符合條件的方案數。注意 64 bit 整型請使用 long long...

python爬樓梯遞迴 爬樓梯(Python3)

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 和 2 階 解題思路 實現了兩種方法,但是第一種超出時間限制 因為遞迴的時候方...

python爬樓梯演算法 爬樓梯(Python3)

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 和 2 階 解題思路 實現了兩種方法,但是第一種超出時間限制 因為遞迴的時候方...