704 二分查找

一:左闭右闭
1.因为包含右边的边界,所以right=nums.size-1
2.区间允许左边等于右边,所以在写while循环时,条件记为 “>=“
3.做完比较后,middle的值不应该包含在区间内
4.
创建一维vector

vector<int> nums; //不指定长度
vector<int> nums(n); //指定长度

添加元素
nums.push_back(1); //直接在末端添加元素1

删除元素
nums.resize(num.size-i); //删除后面i个元素
nums.pop_back(); //删除最后一个元素

获取长度
nums.size();

判空
nums.empty();
nums.size()==0;

5.题解:

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int left = 0;

        int right = nums.size()-1;

        while(left<=right){

            int middle=(left+right)/2;

            if(nums[middle]>target){

                right=middle-1;

            }

            else if(nums[middle]<target){

                left=middle+1;

            }

            else return middle;

        }

        return -1;

 

    }

};

 

一:左闭右开

 

1.因为不包含右边的边界,所以right=nums.size

 

2.区间不允许左边等于右边,所以在写while循环时,条件记为 “>“

 

3.做完比较后,middle的值不应该包含在左边界区间内,所以left=middle+1
4.题解

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int left=0;

        int right=nums.size();

        while(left<right){

            int middle=(left+right)/2;

            if(nums[middle]>target){

                right=middle;

            }

            else if(nums[middle]<target){

                left=middle+1;

            }

            else return middle;

        }

    return -1;

    }

};

27 移除元素


1.for循环的逻辑

下面来看看它的执行过程:

  1. 求解表达式1。
  2. 求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步。
  3. 求解表达式3。
  4. 转回上面第2步继续执行。
  5. 循环结束,执行 for 语句下面的语句。

2.题解

class Solution {

public:

    int removeElement(vector<int>& nums, int val) {

        int slow=0;

        for (int fast=0;fast<nums.size();fast++){

            if(nums[fast]!=val){

                nums[slow]=nums[fast];

                slow++;

            }

        }

        return slow;

    }

};

 

posted on 2022-12-28 15:26  有什么大不了就散  阅读(79)  评论(0)    收藏  举报