twoPointers 左右各掃一遍

2021-10-06 08:54:37 字數 2547 閱讀 9695

題目

簡介135. candy

貪心1249. minimum remove to make valid parentheses

代替棧操作

一行有n個小孩,每個小孩有個「分數」。有兩個規則:

1)每個小孩至少有一顆糖

2)如果乙個小孩比旁邊小孩分高,則糖也要比他多。

input: [1,0,2],output: 5

explanation: you can allocate to the first, second and third child with 2, 1, 2 candies respectively.

這個題用貪心的方法做。

思路(抄自woibu):初始化所有小孩糖數目為1,

該演算法時間複雜度為o(n)。之所以兩次掃瞄,即可達成要求,是因為:

class

solution

}//scan from right to left(保證每一點比他右邊candy更多)

for(

int i = n -

1; i >

0; i--)}

int sum =0;

for(

int res : result)

return sum;

}}

只含"(",")", 小寫字母的字串,求去掉盡量少的括號,可以使得餘下的字串valid。返回任意有效組合。

valid定義為:

1)it is the empty string, contains only lowercase characters,

2)or it can be written as ab (a concatenated with b), where a and b are valid strings,

3)or it can be written as (a), where a is a valid string.

input: s = 「lee(t(c )o)de)」

output: 「lee(t(c )o)de」

explanation: 「lee(t(co )de)」 , 「lee(t(c )ode)」 would also be accepted.

直覺:括號總是想到用棧,遇到"(「入棧,遇到」)「就一直pop直到」("出棧……

為啥不這樣做呢?一方面使用了額外的memory,另一方面最關鍵的,是這個題不是「判斷」是否合法,而是要去掉某些括號only,原來的字串保持不變。從棧**來是逆序的,還要額外調整順序。

想到乙個改進,棧只存放括號的下標,把invalid的括號的下標記下來,最後再從頭掃一遍原字串,把invalid括號去掉就好。

//solution 1:use stack for parentheses indexes

class

solution

else

if(chars[i]

==')'

)else}}

while

(!stack.

isempty()

)

stringbuilder sb =

newstringbuilder()

;for

(int i =

0; i < s.

length()

; i++

) sb.

(chars[i]);

}return sb.

tostring()

;}}

如果不使用棧,只用「左括號用了幾個」來代替,也可以。左右各掃一遍。大致思路是:

具體的資料結構,還是要用兩個stringbuilder。 go right放進sb1,go left再捯進sb2,作為最終輸出。

我覺得兩種方法思路差不多,純粹為了作為「可以使用左右各掃一遍的方法」的乙個?,生硬地放在這裡吧哈哈。

class

solution

stringbuilder sb =

newstringbuilder()

;int left =0;

for(

char ch : s.

tochararray()

)else

if(ch ==

')')

left--;}

sb.(ch);}

//what if you got more '(' than needed

stringbuilder res =

newstringbuilder()

;for

(int i = sb.

length()

-1; i >=

0; i--

) res.

(c);

}return res.

reverse()

.tostring()

;}}

掃一掃 移動端 掃一掃移動端車牌識別

車牌區域在整幅影象中所佔比例很小,車牌的顏色 大小 位置也不確定,並且定位演算法要能夠克服不同光照和複雜背景的影響,還要兼顧準確性和實時性,因此快速準確的定位車牌是比較困難的。移動端掃一掃車牌,識別出車牌號的技術功能 1.識別車牌種類多 藍牌 黃牌 掛車號牌 新軍牌 警牌 新武警車牌 教練車牌 大使...

WEBAPI 微信掃一掃

public class wxcontroller apicontroller 傳送模板訊息內容 獲取請求返回內容 生成隨機字串 目標字串的長度 是否包含數字,1 包含,預設為包含 是否包含小寫字母,1 包含,預設為包含 是否包含大寫字母,1 包含,預設為包含 是否包含特殊字元,1 包含,預設為不包...

一屋不掃何以掃天下

幾天前,舉辦了一場關於後勤的會議,感受頗深。但是由於最近比較忙,沒能來得及總結這篇部落格。現在我來講一下會議的感受。之前一直感覺各個屋子都十分乾淨了,但是那天大掃除動用了4個組幾十號人,比計畫中多了許多。為什麼對多出這些人來打掃,原因是想要把乙個簡單的小事做到極致。而且老師帶領打掃了最最不易清理的地...