「程式碼隨想錄演算法訓練營」第一天(補) | 陣列 part1

云雀AC了一整天發表於2024-07-07

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函式的,但是感覺這應該不是考察的重點,然後就使用了雙指標。

  1. 當左邊指標i對應的值等於要刪除的元素時,將位於右邊的指標j的值覆蓋到左邊指標,並且j++
  2. 當左邊指標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;
    }
};

卡哥思路我還真沒想過,使用快慢指標

相關文章