陣列,鍊錶相關刷題彙總

2021-10-08 18:30:34 字數 2178 閱讀 1857

難度,簡單

思路1:由於是找和為target的兩個元素,所以相當於是遍歷這個nums,然後看是否存在 target-nums[i],最暴力方法就是直接兩層迴圈,但是可以借助map來進行實現,第乙個int是元素,第二個值是下標

class

solution

//沒找到就放進map

mp.insert

(make_pair

(nums[i]

, i));

}return res;

} vector<

int> res;

map<

int,

int> mp;

};

思路2:對vector進行排序,然後用雙指標,一頭一尾向中間靠攏,但是由於題目是要輸出下標,所以需要乙個nums的複製體,來記錄原資料的下標和元素的對應關係

class

solution

if(left < right)

//由於left 和 right 是不相等的,所以同時只判斷乙個

// 用 else if

參考上面一題的思路二,還是雙指標法,但是需要考慮去重

class

solution);

while

(l < r && nums[l]

== nums[l+1]

)//l來到最後乙個與nums[l]相等的位置

l+=1

;//l+1則來到與nums[l]不等的位置

while

(l < r && nums[r]

== nums[r-1]

) r-=1

;//l來到最後乙個與nums[l]不等的位置

// while (l < r && nums[l] == nums[++l]);

// while (l < r && nums[r] == nums[--r]);

}else

if(sum >0)

else}}

return result;}}

;

思路:雙指標**,兩個指標向中間逐步逼近,因為水的寬度就是遍歷的右邊界減去左邊界,但是水的高度就取決於兩邊界中較低的一側,那麼為什麼我們移動的是較低的一側呢,因為這樣的話,如果在移動的過程中,遇到了更高的左右邊界,雖然寬度降低,但是還是有可能使得乘積變大,但如果移動本身就較高的邊界的話,不但導致寬度減小,而且無法從高度上影響乘積

class

solution

return area;}}

;

思路:雙指標**,乙個指標用來遍歷vector,另乙個指標用來記錄非零元素的位置

class

solution}}

};

思路:假如我們是要到達第 n 級台階,那只有兩種情況,一種是從n-1級過來,另一種是從n-2級過來

class

solution

return c;}}

;

思路:第一種方法是用set來記錄我們訪問過的元素,每次遍歷到乙個節點,先看看在set中是否存在,如果存在則返回true,如果不存在則 insert進set中,第二種方法是快慢指標,當然叫雙指標也可以,讓快指標每次走兩步,慢指標每次往後走一步,如果兩者能相遇,則表示有環

//  思路一

class

solution

return

false;}

};

思路二

class

solution

return

false;}

};

刷題筆記 鍊錶相關

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。分析 初始時,將 pren 指向 nullptr,curn 指向鍊錶首部,提前記錄好鍊錶的下乙個節點。為了反轉鍊錶,要將 curn 的 next 指標指向 pren。class solution return curn 輸入乙個鍊錶,輸出該鍊錶中倒數第k個...

演算法題 鍊錶相關

題目 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。解析 由於只輸入了需要刪除的節點node,因此無法獲取刪除節點node的前乙個節點pre,從而也就無法將前乙個節點pre指向刪除節點的下乙個節點nex 既然無法通過修改指標完成,那麼肯定要修改鍊錶節點的值...

鍊錶相關程式設計題 Python

從尾到頭列印鍊錶 鍊錶中倒數第k個結點 class solution def findkthtotail self,head,k write code here if not head return none pfast,pslow head,head for i in range k if pfa...