代码随想录训练营day1:数组part01

1.二分法查找:

区间默认是左闭右开和左闭右闭。
具体区别在代码中解释。

    int search(vector<int>& nums, int target) {
        int leftIndex=0;
        int rightIndex=nums.size()-1;
        while(leftIndex<=rightIndex){
            int middleIndex=(leftIndex+rightIndex)/2;

代码可以精简的地方:while不加后边的条件语句,可以省去前边的middle赋值和判断。

class Solution {
public:
    int search(vector<int>& nums, int target) {#在注释中解释左闭右开原则
        int leftIndex=0;
        int rightIndex=nums.size()-1;#rightIndex=nums.size()int middleIndex=(leftIndex+rightIndex)/2;
        if(nums[middleIndex]==target) return middleIndex;
        while(leftIndex<=rightIndex && target!=nums[middleIndex]){#leftIndex<=rightIndex
            middleIndex=(leftIndex+rightIndex)/2;
            if(target<nums[middleIndex]){
                rightIndex=middleIndex-1;#rightIndex=middleIndex;
            }
            else if(target>nums[middleIndex]){
                leftIndex=middleIndex+1;
            }
            else{
                return middleIndex;
            }
        }
        return -1;

    }
};

二分法的同类型题

遇到有序数据寻找元素即可考虑二分法,每次更新左/边界,直接缩小一般搜索范围。
时间复杂度也变成O(n)
把所有情况考虑清楚。列举情况一二三

移除指定元素

双指针法。

你可能感兴趣的:(算法,数据结构)