美文网首页
代码随想录算法训练营第一天|704. 二分查找、27. 移除元素

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

作者: eagleX | 来源:发表于2023-10-10 22:56 被阅读0次
    1. 二分查找
      前提是数组为有序数组
      注意开闭区间
      int search(vector<int>& nums, int target) {
      int left = 0;
      int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]
      while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=
      int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2
      if (nums[middle] > target) {
      right = middle - 1; // target 在左区间,所以[left, middle - 1]
      } else if (nums[middle] < target) {
      left = middle + 1; // target 在右区间,所以[middle + 1, right]
      } else { // nums[middle] == target
      return middle; // 数组中找到目标值,直接返回下标
      }
      }
      // 未找到目标值
      return -1;
      }

    2. 移除元素
      双指针法(快慢指针法)
      int removeElement(vector<int>& nums, int val) {
      int slowIndex = 0;
      for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
      if (val != nums[fastIndex]) {
      nums[slowIndex++] = nums[fastIndex];
      }
      }
      return slowIndex;
      }

    用慢指针接收快指针对应的值

    相关文章

      网友评论

          本文标题:代码随想录算法训练营第一天|704. 二分查找、27. 移除元素

          本文链接:https://www.haomeiwen.com/subject/phmzpdtx.html