704. 二分查詢
題目連結:https://leetcode.cn/problems/binary-search/
題目難度:簡單
文章講解:https://programmercarl.com/0704.二分查詢.html
影片講解: https://www.bilibili.com/video/BV1fA4y1o715
題目狀態:透過
個人思路:
就是簡單的二分查詢思路,判斷陣列中間的值是否等於目標值,不等於就更新範圍。
具體程式碼:
class Solution {
public:
int search(vector<int>& nums, int target) {
int low = 0, high = nums.size() - 1;
return Binary(nums, low, high, target);
}
int Binary(vector<int> &nums, int low, int high, int target) {
if(low > high) return -1;
int mid = low + (high - low) / 2;
if(nums[mid] == target) {
return mid;
}
else if(nums[mid] > target) {
return Binary(nums, low, mid - 1, target);
}
else {
return Binary(nums, mid + 1, high, target);
}
}
};
27. 移除元素
題目連結:https://leetcode.cn/problems/remove-element/
題目難度:簡單
文章講解:https://programmercarl.com/0027.移除元素.html
影片講解: https://www.bilibili.com/video/BV12A4y1Z7LP
題目狀態:透過
個人思路:
一開始要打算直接用erase
函式的,但是感覺這應該不是考察的重點,然後就使用了雙指標。
- 當左邊指標
i
對應的值等於要刪除的元素時,將位於右邊的指標j
的值覆蓋到左邊指標,並且j++
; - 當左邊指標
i
對應的值不等於要刪除的元素時,i++
。
具體程式碼:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i = 0, j = nums.size();
while(i < j) {
if(nums[i] == val) {
nums[i] = nums[j - 1];
j--;
}
else {
i++;
}
}
return j;
}
};
卡哥思路我還真沒想過,使用快慢指標