Day2-977.有序數(shù)組的平方 ,209.長(zhǎng)度最小的子數(shù)組 ,59.螺旋矩陣II

977.有序數(shù)組的平方

思考過(guò)程:

題目說(shuō)非遞減順序,意思是遞增但是可能有相同的數(shù)。

題目要求包括兩個(gè)部分:1.計(jì)算平方,覆蓋之前的內(nèi)容,2.排序。

要完成計(jì)算平方很簡(jiǎn)單,一個(gè)for循環(huán)就可以。

排序用兩個(gè)for循環(huán)?昨天的兩個(gè)for轉(zhuǎn)變?yōu)橐粋€(gè)for是將原先的內(nèi)容直接覆蓋,今天的是不是用一個(gè)中間值,多一步對(duì)比也能實(shí)現(xiàn)?

讀第二遍題目發(fā)現(xiàn):既然是按照非遞減排列的,那么如果前端值是負(fù)數(shù),一定比下一個(gè)數(shù)大,也就是說(shuō),找到絕對(duì)值的最小值,先給他們排個(gè)序再平方。

emmmm也需要排序,這樣復(fù)雜度好像沒(méi)變化。

先寫(xiě)一寫(xiě)吧

寫(xiě)著寫(xiě)著發(fā)現(xiàn)排序并不需要2個(gè)for,只需要交換相鄰數(shù)就好

好了不行,這樣不能保證前面的數(shù)排序正確,好家伙,我連最簡(jiǎn)單的冒泡都忘了嗎?

看代碼隨想錄

原來(lái)C++有專門的排序函數(shù)....

這個(gè)雙指針的方法好巧妙??!我最開(kāi)始剛還想過(guò)雙指針,但是沒(méi)有運(yùn)用的特別靈活

理清這個(gè)思路之后其實(shí)問(wèn)題關(guān)鍵點(diǎn)還是在邊界上

第一版,樣例AC,但是中間測(cè)試數(shù)據(jù)出現(xiàn)執(zhí)行出錯(cuò),說(shuō)明邊界存在問(wèn)題

class?Solution?{

public:

????vector<int>?sortedSquares(vector<int>&?nums)?{

????????int?lens?=?nums.size();

????????vector<int>?result(lens,?0);

????????int?left?=?0,?right?=?lens?-?1;

????????while(left?<?right){

????????????if(abs(nums[left])?>?abs(nums[right])){

????????????????result[lens-1]?=?nums[left]?*?nums[left];

????????????????left?=?left?+?1;

????????????????lens--;

????????????}

????????????else?if(abs(nums[left])?<?abs(nums[right])){

????????????????result[lens-1]?=?nums[right]?*?nums[right];

????????????????right?=?right?-?1;

????????????????lens--;

????????????}

????????????else{

????????????????result[lens-1]?=?nums[left]?*?nums[left];

????????????????lens--;

????????????????result[lens-1]?=?nums[right]?*?nums[right];

????????????????lens--;

????????????}

????????}

????????result[0]?=?nums[right]?*?nums[right];


????????return?result;

????}

};

第二版,所有測(cè)試用例都AC了,不如代碼隨想錄簡(jiǎn)單,等二刷自增自減使用更熟練再改改

class?Solution?{

public:

????vector<int>?sortedSquares(vector<int>&?nums)?{

????????int?lens?=?nums.size();

????????vector<int>?result(lens,?0);

????????int?left?=?0,?right?=?lens?-?1;

????????while(left?<=?right){

????????????if(abs(nums[left])?>?abs(nums[right])){

????????????????result[lens-1]?=?nums[left]?*?nums[left];

????????????????left?=?left?+?1;

????????????????lens--;

????????????}

????????????else?{

????????????????result[lens-1]?=?nums[right]?*?nums[right];

????????????????right?=?right?-?1;

????????????????lens--;

????????????}

????????}

????????return?result;

????}

};

209.長(zhǎng)度最小的子數(shù)組

思考過(guò)程:

遞歸肯定是可以實(shí)現(xiàn)的。思考一下簡(jiǎn)單方法。

要想長(zhǎng)度最小,就要找到數(shù)組里面的最大值,再向左向右雙指針?lè)謩e計(jì)算,最終得到最小數(shù),寫(xiě)一下。

寫(xiě)的中間遇到問(wèn)題:

1.如果說(shuō)兩邊不一樣長(zhǎng),如何檢測(cè)到right到頭了,但是left還可以繼續(xù)加呢??

2.如果是橫跨最大值的一個(gè)數(shù)組呢?

這個(gè)思路行不通

看代碼隨想錄

卡哥使用的滑動(dòng)窗口實(shí)現(xiàn)的。

實(shí)驗(yàn)室馬上關(guān)門了,我先做下一道,回去之后再詳細(xì)看,明天更新~

59.螺旋矩陣II

矩陣問(wèn)題首先判斷有幾行幾列,顯然結(jié)果是n行n列。

螺旋矩陣賦值最簡(jiǎn)單的是用兩個(gè)for,但是肯定可以用雙指針解決,嘻嘻我已經(jīng)熟啦,讓我試著寫(xiě)一下。

寫(xiě)著寫(xiě)著...對(duì)不起,我不熟....思考很簡(jiǎn)單,但是真正寫(xiě)代碼判斷限制條件的時(shí)候還是會(huì)出問(wèn)題

看代碼隨想錄

明天更明天更,要回宿舍了

總結(jié)

1.對(duì)雙指針的使用不夠靈活

2.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容