算法day1数组|力扣704二分查找,27移除元素

发布时间 2023-11-09 22:16:17作者: 猴老鸽

数组基础理论
数组是存放在连续内存空间上的相同类型数据的集合。
可以通过下标轻松获取数据,但是增删元素的时候需要移动其他元素
Vector和array的区别 vector的底层实现是array,但是vector是容器不是数组
数组的元素不能删除,只能覆盖
image
小技巧:取中间 int mid =l+r>>1;//有时候怕溢出,写成 l+((r-l)>>1)
左闭右闭 l=0; r=nums.size()-1; while(l<=r)l=mid+1;r=mid-1;
左闭右开 l=0; r=nums.size(); while(r>l) l=mid+1; r=mid;

image
暴力法:

点击查看代码
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
        for (int i = 0; i < size; i++) {
            if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位
                for (int j = i + 1; j < size; j++) {
                    nums[j - 1] = nums[j];
                }
                i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
                size--; // 此时数组的大小-1
            }
        }
        return size;

    }
};
快慢指针: 慢只针所指的位置用来放不是val的数,val被后面的数覆盖
点击查看代码
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];
            }
        }
        return slow;


    }
};