不要糾結,幹就完事了,熟練度很重要!!!多練習,多總結!!!
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。
滑動視窗非常經典的一道題,而且在大廠面試手撕中也時有出現!!!
比較經典解法是借助雙端佇列來實現,我們需要遍歷陣列,佇列中新增的陣列的索引值,我們需要保持的是佇列頭部索引對應的是當前視窗的最大值!每次新增元素的索引,如果發現當前索引的元素值比佇列現存的各個索引元素值都要大時,就把這些全部淘汰掉,佇列首位就是當前視窗最大元素的索引值,如果當前元素小於佇列首部索引對應的最大值則正常新增即可,只需在視窗長度超過k值時淘汰隊首索引即可!!!然後在視窗長度達到k值時每次新增的都是隊首索引對應的元素,因為隊首就是最大值的索引!
class
solution
linkedlist queue=
newlinkedlist
<
>()
; int[
] res=
newint
[nums.length-k+1]
;for
(int i=
0;i) queue.
addlast
(i);
if(queue.
peekfirst()
<=i-k)
if(i+
1>=k)
}return res;
}}
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。
雙指標思路!維護兩個指標left和right,同時還有乙個set集合用來幫助統計最長長度。兩指標初始值都是字串起點,然後每次判斷當前字元是否在set中,如果不在那麼新增到set中同時移動right++,並計算長度值(right-left),否則將左指標存在的元素移除set中,再left++。
class
solution
int n=s.
length()
; hashset
set=
newhashset
<
>()
; int res=
0,left=
0,right=0;
while
(leftelse
}return res;
}}
給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。
說明:字母異位詞指字母相同,但排列不同的字串。
依然是雙指標的思路,既然是異位詞,而且字母只有26個,那麼可以維護兩個陣列代替hashmap使用,只要兩個陣列中統計的相應字母出現次數相同,即符合異位詞的定義記錄出現下標即可!!!那麼初始化時,首先統計匹配字串陣列parr各個字元出現次數(只需將出現字元減去『a』即可得到對應陣列下標,然後統計++次數即可),然後對目標字串sarr統計與parr相同長度的字元出現頻次,為什麼是相同長度?我們把parr想象成乙個滑動視窗,初始位置與sarr對其,然後每次移動。我們用兩個指標i,j來標記每次視窗移動的過程,在每次移動過程中將相同長度的sarr與parr進行對比,判斷各字元出現頻次是否相同,若相同則記錄下當前i指標,即為異位詞的首字元索引!!!
class
solution
arraylist list=
newarraylist
<
>()
; int[
] parr=
newint[26
];int[
] sarr=
newint[26
];for(int i=
0;ilength()
;i++
) int i=
0,j=p.
length()
;while
(jlength()
) sarr[s.
charat
(i)-
'a']--;
i++; sarr[s.
charat
(j)-
'a']++;
j++;}
if(issame
(parr,sarr)
)return list;
}public boolean issame
(int[
] parr,int[
] sarr)
}return
true;}
}
輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。
雙指標!雙指標!雙指標!
只不過本題有乙個小技巧需要注意,因為要求是連續的序列,那麼搜素是有上界的!你想想對於乙個正整數n,要求連續序列最少為2個,那麼指標最大就到n/2了!不會再大了!
我們維護乙個視窗,其大小只需滿足大於2即可,當兩個指標維護的視窗和小於target時,右指標向右移動即可,大於target值時,左指標向左移動即可!等於target時,將視窗中的元素新增到乙個新建陣列中,同時將左指標向左移動!!!
class
solution
else
if(windows>target)
else
list.
add(tmp)
; windows-=i;
i++;}
}return list.
toarray
(new
int[list.
size()
]);}
}
覺得本部落格有用的客官,可以給個贊鼓勵下! 嘿嘿 學PHP不能不懂的cookie知識
一 生活中的cookie 無論你知不知道cookie是什麼,在你的生活中,肯定有使用過它。還記得你使用瀏覽器瀏覽網頁時,當你要登陸時,網頁上有乙個記住密碼或自動登陸的選項,當你選擇時,你就使用了cookie。那麼在下次訪問該 時,你可能就已經自動地登陸了,而不需要從重輸入使用者名稱和密碼,至於它是怎...
TCP的固定視窗和滑動視窗
tcp 提供了流量控制機制。流量控制可以調整給定會話中源和目的之間的資料流速,有助於保持 tcp 傳輸的可靠性。tcp 還提供了流量控制機制。流量控制可以調整給定會話中源和目的之間的資料流速,有助於保持 tcp 傳輸的可靠性。流量控制的實施方法包括限制一次可以 的資料段數量,並要求在傳送更多資料段之...
關於unicode不能不知道的知識
在計算機出現的中後期,人們開發了unix,並為無重音英語字母開發了一套稱為ascii的編碼,它能夠使用32到127之間的數字表示各個字元,空格是32。由於那個時期生產的大多數計算機使用8位大小的位元組,因此使用者不僅可以存放所有可能的ascii字元,而且還有整整一位空餘下來。他們想可以把128 25...