day01 - 数组

zqh2023 / 2023-08-09 / 原文

704. 二分查找

 

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int middle = 0;
        while(left <= right){
            middle = left+(right-left)/2;//(left + right) / 2;
            if(nums[middle] == target)
                return middle;
            else if(nums[middle] > target)
                right = middle - 1;
            else
                left = middle + 1;
        }
        return -1;
    }
};

  

35. 搜索插入位置

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
       int left = 0;
       int right = nums.size() - 1;
       int middle = 0;
       while(left <= right){
           middle = left + (right - left)/2;
           cout << middle << endl;
           if(nums[middle] == target)
                return middle;
            else if(nums[middle] > target)
                right = middle - 1;
            else
                left = middle + 1;
       }
       cout << "left:" << left << ", right:" << right << endl;
       return left;
    }
};

  

34. 在排序数组中查找元素的第一个和最后一个位置 

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int middle = 0;
        bool left_stop = false;
        bool right_stop = false;
        while(left <= right){
            middle = left + (right - left)/2;
            if(nums[middle] == target)
                break;
            else if(nums[middle] > target)
                right = middle - 1;
            else
                left = middle + 1;
        }
        if(left > right)
            return vector<int>{-1, -1};
        left = right = middle;
        cout << middle << endl;
        //向左向右寻找不是target就停止
        while(!left_stop || !right_stop){
            if(left - 1 >= 0 && nums[left - 1] == target)
                left--;
            else
                left_stop = true;
            if(right + 1 < nums.size() && nums[right + 1] == target)
                right++;
            else
                right_stop = true;
        }
        return vector<int>{left, right};
    }
};

  

27. 移除元素

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        vector<int>::iterator it;
        for(it=nums.begin();it!=nums.end();){
            if(*it == val)
               nums.erase(it);
            else
                it++;
        }
        return nums.size();
    }
};