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

111 阅读1分钟

Leetcode 704 二分查找

[题目链接](704. 二分查找 - 力扣(LeetCode))

该题目主要关注部分为给数组增加下标时对right下标的处理,如果令right=nums.length,则在后续的代码中不需考虑left = right的情况。若令right=nums.length - 1,则在后续代码中需要考虑left = right 的情况。

令right = nums.length - 1 的情况下的代码

//right = nums.length - 1 的情况下的代码

class Solution {
    public int search(int[] nums, int target) {
    int left = 0 , right = nums.length - 1;
    while(left <= right){
    int mid =left + ((right-left) >> 1);
    if(target > nums[mid]){
        left = mid + 1;
    } 
   else if(target < nums[mid]){
        right = mid - 1;
    }
    else if(target == nums[mid]) {
        return mid;
    }
    }
    return -1;
 }
}

令right = nums.length 的情况下的代码

//right = nums.length 的情况下的代码

class Solution {
    public int search(int[] nums, int target) {
    int left = 0 , right = nums.length;
    while(left < right){
    int mid =left + ((right-left) >> 1);
    if(target > nums[mid]){
        left = mid + 1;
    } 
   else if(target < nums[mid]){
        right = mid ;
    }
    else if(target == nums[mid]) {
        return mid;
    }
    }
    return -1;
 }
}

Leetcode 27. 移除元素

[题目链接](27. 移除元素 - 力扣(LeetCode))

该题目需要考虑数组的基础理论,数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。 在该题目中,使用快慢指针法来进行解决。 (数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili)

简单理解为快指针 fastIndex 一直在数组上移动,当nums[fastIndex] = val 时,慢指针 slowIndex 在 nums[fastIndex] = val的位置暂停移动,直到下一个nums[fastIndex] != val 时,将nums[fastIndex]的数据写入 slowIndex 当前所在位置。

代码实现

//使用快慢指针法实现数组中删除元素

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