122.買賣股票的最佳時(shí)機(jī)II??
思路:
用profit記錄每一輪的利益,tempPrice記錄手中的價(jià)格(假裝買入第一天)园爷,result記錄獲得的收益
如果當(dāng)前價(jià)格-手中持有價(jià)格小于上一輪profit(新一輪貢獻(xiàn)為負(fù)數(shù))宠蚂,則按上一輪價(jià)格賣出,result+=profit, 買入新的股票童社,profit=0求厕;如果大于等于上一輪profit則繼續(xù)持有,現(xiàn)在的profit = profit[i]-tempPrice;
最后如果profit不等于0扰楼,說明最后一天還在持有甘改,要在最后進(jìn)行賣出,result+=profit灭抑;
返回result;
看視頻后:
這題的貪心貪在把收益分割成每天的收益,只收獲收益為正的收益抵代。
Day[0-3]=Day[3]-Day[2]+Day[2]-Day[1]+Day[1]-Day[0]
int?result=0;
????????for(int?i=1;i<prices.size();i++)
????????????result+=max(0,prices[i]-prices[i-1]);
????????return?result;
55. 跳躍游戲
思路:
nums.size()==1可直接返回腾节;
用temp決定跳躍幅度,每次都跳最大,如果能跳到終點(diǎn)就可以返回true案腺,否則false庆冕。但過不了部分案例。
看視頻后:
cover決定覆蓋范圍,cover的更新應(yīng)當(dāng)為cover=max(temp,i+nums[i]) ,如果覆蓋范圍大于等于最后一個下標(biāo)劈榨,返回true. 如果遍歷到最后都沒有覆蓋到最后一個下標(biāo)访递,返回false.
不用max則可能縮小了覆蓋范圍,如新的節(jié)點(diǎn)的覆蓋范圍變小的時(shí)候同辣。
?45.跳躍游戲II?
思路:
思路錯誤拷姿。
看視頻后:
關(guān)鍵在于以最小的步數(shù)增加最大的覆蓋范圍,直到覆蓋范圍覆蓋了終點(diǎn)旱函。
本題需要統(tǒng)計(jì)兩個覆蓋范圍响巢,當(dāng)前一步的覆蓋范圍和下一步的覆蓋范圍。移動下標(biāo)達(dá)到了當(dāng)前覆蓋的最遠(yuǎn)距離下標(biāo)時(shí)棒妨,步數(shù)就要加一踪古,來增加覆蓋距離。最后的步數(shù)就是最少步數(shù)券腔。
這里還是有個特殊情況需要考慮伏穆,當(dāng)移動下標(biāo)達(dá)到了當(dāng)前覆蓋的最遠(yuǎn)距離下標(biāo)時(shí)
如果當(dāng)前覆蓋最遠(yuǎn)距離下標(biāo)不是是集合終點(diǎn),步數(shù)就加一纷纫,還需要繼續(xù)走枕扫。
如果當(dāng)前覆蓋最遠(yuǎn)距離下標(biāo)就是是集合終點(diǎn),步數(shù)不用加一涛酗,因?yàn)椴荒茉偻笞吡恕?/p>
每一輪 nextDistance = max(nums[i]+i,nextDistance)
如果 i 已經(jīng)碰到這一輪的終點(diǎn)(curDistance)了, count++铡原,把下一輪距離賦給這一輪距離,如果下一輪距離已經(jīng)抵達(dá)終點(diǎn)商叹,則直接break; 最終return count燕刻;