查詢表 滑動視窗

2021-10-04 10:07:04 字數 1390 閱讀 4533

例題:存在重複元素ii

給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值至多為 k。

·ij差的絕對值至多為k的話,那麼可以使用乙個大小固定為k+1的滑動視窗,只要這個視窗內有重複的元素,那就說明符合題意,返回true。如果遍歷完都找不到,返回false。

由於不需要統計次數,所以使用set即可。

class solution 

while

(rreturn

false

; }

}

給定乙個整數陣列,判斷是否存在重複元素。

如果任何值在陣列**現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。

這比例題還簡單,直接滑動視窗都省了,一直遍歷即可。

class solution 

return

false

; }

}

給定乙個整數陣列,判斷陣列中是否有兩個不同的索引 i 和 j,使得nums [i] 和 nums [j] 的差的絕對值最大為 t,並且i 和 j 之間的差的絕對值最大為 ķ

思路:桶排序

桶排序的思路就是先將所有元素放到乙個乙個桶裡,比如說[0,9],[10,19],[20,29],[30,39],[40,49] 這樣的,然後再對每乙個同中的元素進行排序。

那麼這個題呢就不用排序了,但我們可以建造多個大小為t+1的桶,來儲存滑動視窗中的數字。

每次滑動視窗遍歷到乙個新的數字,就先判斷它應該放到哪個桶裡,使用方法getid(),得到桶號之後判斷:

一直到遍歷完都沒有找到的話就返回false。

由於每個桶最多只能有乙個元素,所以只需要將桶號儲存在乙個map中即可,key為桶號,value為桶中元素的值

public class solution 

public

boolean containsnearbyalmostduplicate(

int[

] nums,

int k,

int t)

return

false

; }

}

Week5 D 滑動視窗滑動視窗

week5 d 滑動視窗滑動視窗 zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position ...

week5 D 滑動視窗滑動視窗

zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.window position minimum value max...

滑動視窗演算法 演算法 滑動視窗 二

演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...