刷題日記1
LeetCode27 移除元素:
題目講到了剩余元素可以任意順序,且不管后面的元素是什么。我本來(lái)想到的是轉(zhuǎn)化為鏈表或者建立一個(gè)新數(shù)組,掃描一遍存到新數(shù)組里。但是,這不是題目的原意。后面,想到既然可以任意順序,那么可以雙指針,一個(gè)指向數(shù)據(jù)前端left,一個(gè)指向數(shù)據(jù)末尾right,當(dāng)l值等于val時(shí),將l值與r值交換并將r--,如果l值不等于val時(shí),將l++。放在一個(gè)循環(huán)里,當(dāng)l>r時(shí)循環(huán)結(jié)束。
以上是我的思路,提交上去之后,過(guò)了。
看了題解,我的思路是差不多對(duì)的,但我學(xué)到了快慢指針的思想。slow和fast一起向后走,遇到val時(shí),slow停下,fast繼續(xù)向后,當(dāng)fast沒有遇到val時(shí),交換值,slow向后走。循環(huán)以上直到fast到末尾。

LeetCode977?有序數(shù)組的平方:
一開始就想到找到數(shù)組的最低點(diǎn),然后分別向左和向右兩個(gè)指針進(jìn)行比較,直到兩個(gè)指針都超出數(shù)組范圍跳出循環(huán)。
這里遇到了一點(diǎn)問(wèn)題,LeetCode提示下標(biāo)越界了,找了一圈才突然意識(shí)到,我寫的判斷條件是或,那么如果第一個(gè)條件不滿足的話,第二個(gè)條件一定會(huì)運(yùn)行的呀。修改了一下,過(guò)了。
看了題解,我發(fā)現(xiàn)了更好的辦法,直接從數(shù)組的頭尾定義雙指針,一起向中間靠攏,當(dāng)l>r時(shí)終止循環(huán)。
我還學(xué)到了merge()函數(shù),C++在其STL庫(kù)中提供了merge(),它對(duì)于將排序兩個(gè)容器合并為一個(gè)容器非常有用。outiter merge (initer1 beg1, initer1 end1, initer2 beg2, initer2 end2,?outiter res)

LeetCode209 長(zhǎng)度最小的子數(shù)組:
這題之前做過(guò)一次,從頭到尾掃描一遍,一次一次分析滿足要求的連續(xù)子序列是否為最短,要設(shè)一個(gè)指針指向子序列的頭下標(biāo)。

LeetCode59?螺旋矩陣 II:
這題一開始看上去就很迷,有想過(guò)是不是直接模擬,但......,以為不會(huì)這么簡(jiǎn)單,冥思苦想了幾分鐘后,看了一眼題解。(原來(lái)還真是這樣?。。。。?/span>
設(shè)置四個(gè)指針left,right,top,bottom,之后一直循環(huán)就可以了。

DAY1總結(jié):
今天發(fā)現(xiàn)之前突擊的算法知識(shí)遺忘的差不多了,只能一切重新開始咯~
不止為了預(yù)推免,是真正想借此機(jī)會(huì)好好提升一下自己!加油吧~