day1-代码随想录算法训练营(19期)leetcode704. 二分查找、35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置、27. 移除元素

704.二分查找

1.分析:有序数组查找目标值,找到返回下标,没找到返回-1

思路一:二分查找

感觉掌握的不太熟练,边界问题调试了多次

class Solution {
public:
    int search(vector& nums, int target) {
        //分析:有序数组查找目标值   二分查找
        //思路:left   mid  right
        if(nums.empty())
            return -1;
        int n=nums.size();
        int left=0,right=n-1,mid=0;
        while(left<=right)
        {
            if(nums[left]==target)
                return left;
            if(nums[right]==target)
                return right;
            mid=(left+right)/2;
            if(nums[mid]==target)
                return mid;
            else if(nums[mid]>target)
                right=mid-1;
            else
                left=mid+1;
        }
        return -1;
    }
};

思路二:直接遍历

class Solution {
public:
    int search(vector& nums, int target) {
        //分析:有序数组查找目标值   二分查找
        //思路:left   mid  right
        //思路二:
        for(int i=0;itarget)
                break;
        }
        return -1;
    }
};

看完题解:

class Solution {
public:
    int search(vector& nums, int target) {
        //分析:有序数组查找目标值   二分查找
        //思路:left   mid  right
        //左闭右闭
        // int l=0,r=nums.size()-1,mid=0;
        // while(l<=r)
        // {
        //     cout<target)
        //         r=mid-1;
        //     else if(nums[mid]target)
                r=mid;
            else if(nums[mid]

可能时环境吵的原因看起来没啥感觉,记下来了取右边界为空时left和right不能相等

35.搜索插入位置

分析:找目标值下标

思路一:直接遍历

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        int n=nums.size();
        for(int i=0;itarget)
                return i;
        }
        return n;
        
    }
};

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

思路:双指针分开头尾遍历

class Solution {
public:
//思路:双指针分开左右遍历
    vector searchRange(vector& nums, int target) {
        vector ans;
        int mid=count(nums.begin(),nums.end(),target);
        if(mid==0)
            return {-1,-1};
        int l=0,r=nums.size()-1;
        while(l<=r)
        {
            if(nums[l]==target)
            {
                ans.push_back(l);
                cout<=l)
        {
            if(nums[r]==target)
            {
                ans.push_back(r);
                cout<

27.移除元素

思路一:双指针

class Solution {
    public int removeElement(int[] nums, int val) {

    int j=0;
    int len= nums.length;
    for(int i=0;i

思路二:快慢指针

day1-代码随想录算法训练营(19期)leetcode704. 二分查找、35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置、27. 移除元素_第1张图片

分析:一个从0开始保存不为val的数,一个从0开始找不为val的数

你可能感兴趣的:(代码随想录算法训练营(19期),c++,算法,leetcode)