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

704. 二分查找

题目链接:. - 力扣(LeetCode)

给定一个 n 个元素升序数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。

[left, right]:

left == right是有意义的,while (left <= right) 要使用 <=

if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target

[left, right):

left == right是无意义的,while (left < right) 要使用 <

if (nums[middle] > target) right 要赋值为 middle ,在闭右开区间中下一个查询区间不会去比较

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    //定义左右指针
    let left = 0
    let right = nums.length-1
    //采用左闭右闭区间
    while(left <= right){
        let middle = Math.floor((left+right) / 2)
        //当目标值大于middle值时,更新左指针
        if(target > nums[middle]){
            left = middle+1
        }
        //当目标值小于middle值时,更新右指针
        else if(target < nums[middle]){
            right = middle - 1
        }
        //当目标值等于middle值时,返回middle
        else{
            return middle
        }
    }
    //nums中没有找到target,返回-1
    return -1
};

27. 移除元素

题目链接:. - 力扣(LeetCode)

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    let slow = 0
    for(let fast = 0; fast < nums.length; fast++){
        if(nums[fast] !== val){
            nums[slow] = nums[fast]
            slow++
        }
    }
    return slow
};

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值