難度,簡單
思路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...