代码随想录DAY1|Leetcode 704二分查找、Leetcode 27移除元素

本文详细介绍了二分查找算法的实现细节,包括如何确定边界条件以及何时使用等号。此外,还讲解了如何通过双指针技术有效地从数组中移除指定元素,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 704 二分查找

二分查找就是不断的取中间赋给左边界或者右边界;

但是要注意while里面的条件要不要取等于号,以及if结果的边界取mid还是(mid-1)/(mid+1);

  1. 当左闭右闭时,也就是下面的代码,由[1,1]闭区间可知,左右边界可以相等,因此while条件里可以取到等号。因为if条件里是target < nums[mid],也就是mid所在的值一定大于目标值,因此右边界取mid-1,否则不符合条件。
  2. 当左闭右开时,由[1,1)可知,左右边界不可以相等,因此while条件里不可以取到等号。
class Solution {
    public int search(int[] nums, int target) {
        int mid = 0;
        int l = 0;
        int r = nums.length-1;
        while( l <= r ){
            mid = ( l + r )/ 2; 
            if(target < nums[mid]){
                r = mid-1;
            }
            else if(target > nums[mid]){
                l = mid+1;
            }
            else if(target == nums[mid]){
                return mid;
        
            }
        }
        return -1;
    }
}

27 移除元素

数组的元素移除需要两个指针,一个快指针(代码中的i)一个慢指针(代码里的length),通过快指针来找到val所在的位置,慢指针负责存储除去val的元素。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值