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

1,149 阅读1分钟

704.二分查找(简单 标准二分查找)

思路

找“目标值”的题目,因为刷的题也就50很少,所以直接联想到二分查找,套二分查找模板。

模板

  1. 先定义好low, high
  2. while(low<= high开始寻找)
  3. 算出mid = (low+high)/2
  4. 先处理命中情况,中位数=目标值 mid = target
  5. 再处理左右半部查找情况

参考来源:王争数据结构

代码

class Solution {
    public int search(int[] nums, int target) {
        int low = 0;
        int high = nums.length - 1;
        //等于的用意在于当只有一位时,low 要等于high
        while (low <= high) {
            int mid = (low + high) / 2;
            //先处理命中情况,中位数=目标值 mid = target
            if (nums[mid] == target) {
                return mid;
            //左半边情况
            } else if (nums[mid] < target) {
                low = mid + 1;
            //右半边情况    
            } else {
                high = mid - 1;
            }            
        }
        return -1;
    }
}

27. 移除元素

思路

双指针法替代两个for循环,重点是要删除给定元素,两个快慢指针一起移动,当快指针等于给定元素时,只有快指针往前一步,慢指针指向的数替换成快指针,这样才能删除原本快指针想删除的数。

代码

class Solution {
    public int removeElement(int[] nums, int val) {
        // 快慢指针
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
            if (nums[fastIndex] != val) {
                nums[slowIndex] = nums[fastIndex];
                slowIndex++;
            }
        }
        return slowIndex;
    }
}