代码随想录第一天|704.二分查找、27.移除元素

发布时间 2023-08-23 22:38:56作者: 扬博然

二分查找

  对数组的要求有两点:

  • 有序
  • 无重复元素,若有重复元素则返回的元素下标不唯一
边界条件是

while(left<=right)
代码其实是很好理解的

点击查看代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int length = nums.size();
        int left = 0;
        int right = length-1;
        int mid;
        while(left<=right){
            mid = (left +right)/2;
            if(nums[mid]==target)
                return mid;
            else if(target<nums[mid]){
                right = mid - 1;
            }else{
                left = mid +1;
            }
            
        }
        return -1;
    }
};

移除元素

这道题我的思路是暴力解法

  1. 先循环一遍,找到目标值的数量
  2. 从头开始再次循环,找到目标值后,进入二层循环,第二层循环从后往前,找到不是目标值的第一个值,两数交换
  3. 最后返回更新的数组长度
点击查看代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int count=0;
        int length = nums.size();
        for(int m=0;m<length;m++){
            if(nums[m]==val){
                count++;
            }
        }
        for(int i=0;i<length-1;i++){
            if(nums[i]==val){
                for(int j=length-1;j>i;j--){
                    if(nums[j]==val)
                        continue;
                    else{
                        nums[i]=nums[j];
                        nums[j]=val;
                        break;
                    }
                }
            }
        }
        return length-count;
    }
};
移除元素这道题虽然不是最优解,但也通过我自己的努力做出来了,后续再用双指针的方法优化一下