Day1打卡|二分查找+移除元素

1.二分查找 LeetCode704

这道题就是一道典型的二分查找,虽然看见题的第一眼还是想到了api大法。使用IndexOf就是这个功能,

 当然还是要用二分法做这道题

二分查找的三个部分

  1. 预处理 —— 如果集合未排序,则进行排序。

  2. 二分查找 —— 使用循环或递归在每次比较后将查找空间划分为两半。

  3. 后处理 —— 在剩余空间中确定可行的候选者。

二分法自己最高不清的就是边界问题了,每次都不知道是left<right  还是left<=right

1.left<right,即不取right,right=length. 左闭右开

为了防止溢出:mid=left+(right-left)/2

取不到right,当优化左边界和右边界时,也取不到mid,所以优化左边界时right=mid,

右边界left=mid+1

2.left<=right,即能取到right,right=length-1   左闭右闭

可以取到right,当优化左边界和右边界时,也取不到mid,所以优化左边界时right=mid-1

右边界left=mid+1 

找准一个方法就行

2.移除元素  LeetCode27

这道题之前刷过,但是当时应该不太理解,所以在刷就忘了

定义快慢指针,等于新建了一个数组。将符合数组的值放进去

快指针为值,慢指针为索引,符合的元素放进去之后,索引就要++。

慢指针的大小,就是新数组的大小

let slow=0

for(let fast=0;fast<nums.length;fast++){

if(nums[fast]!==val){

nums[slow]=nums[fast]

slow++

}

}

return slow

这样每次不需要被删除的值就被放在了新数组里面,而且没有改变元素的相对位置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值