代码随想录第二期 | Day1 - 数组理论基础

302 阅读1分钟

创建代码仓库

image.png

二分查找

题目链接: 704. 二分查找 - 力扣(Leetcode)

实现思路

  1. 二分查找,找到目标数组中的第一个元素的下标和最后一个元素的下标
  2. 做一个循环,如果说left<=right就一直查找下去
  3. 我们将中间值下标在数组中的位置和目标值进行比较。
  4. 如果说中间值比目标值小,那么我们将数组的后半部分提取出来进行递归操作
  5. 如果说中间值比目标值大。那么我们将数组的前半部分提取出来进行递归操作
  6. 最后找到目标值下标位置返回回去。

代码实现

// 闭合区间情况
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<=right){
            int mid=left+((right-left)/2);
            if(nums[mid]>target){
                right=mid-1;
            }else if(nums[mid]<target){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
};
// 左闭右开区间情况
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size();
        while(left<right){
            int mid=left+(right-left)/2;
            if(nums[mid]>target){
                right=mid;
            }else if(nums[mid]<target){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
};

移除元素

题目链接:27. 移除元素 - 力扣(Leetcode)

实现思路

  1. 首先我们便利一遍原数组
  2. 查找到原数组中的目标值。记住目标值下标
  3. 将下标后面的元素都往前面位移一位,覆盖掉当前元素
  4. 将遍历到目标元素值的下标往前移动一位,并继续往后面查找是否还有目标值
  5. 将所有目标元素覆盖完成之后返回数组长度。

代码实现

// 暴力解法
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;
    }
};
// 双指针法
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slowIndex=0,fastIndex=0;
        for(;fastIndex<nums.size();fastIndex++){
            if(val!=nums[fastIndex]){
                nums[slowIndex++]=nums[fastIndex];
            }
        }
        return slowIndex;
    }
};

CMAKE打包

image.png

提交代码

image.png

image.png