代码随想录算法训练营第一天

​​​​​​二分查找 leetcode704

只能写出暴力破解的方法

思路:

         暴力破解:注意循环终止条件    i <= numsSize-1或i < numsSize

         看视频学的二分法:

手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找

        二分法分为左闭右闭和左闭右开(左开右闭一般不用)两种情况

        这两种情况同样也是后面判断left,right,mid的条件

        求中间值mid更好的方法:

int middle = left + ((right - left) / 2);
int middle = left + ((right - left) >> 2);

left + (right - left)是防止int类型数据溢出,因为left+right可能是一个比32bit大的数,先求差再加left可以防止溢出;二进制对于正数来说右移x位相当于除以2的x几次方,所以右移一位等于➗2,用位运算的好处是比直接相除的操作快

        

左闭右闭左闭右开
初始right条件right等于数组长度减1right直接等于数组长度,因为右边是开区间
while循环条件left <= rightleft < right
当target > nums[mid]left = mid + 1left = mid + 1
当target < nums[mid]right = mid - 1 right = mid

移除元素 leetcode27

同样只能写出暴力破解,两个for循环

思路:

        数组元素的移除其实是后一个元素对前一个元素的覆盖,并不是真正内存地址删除。

        暴力:先找到要删除元素的下标,再用一个for循环从该下标的后一位开始依次覆盖前一位的值。当移除一个元素后,第一次的for循环的i需要减1,以便下一次循环可以再次检查当前位置。

        双指针法:

 LeetCode:27. 移除元素

                快指针和慢指针同时从数组下标为0的元素开始, 在原数组上进行操作,使其成为一个没有目标元素的新数组。快指针是用来寻找新数组里面所需要的元素,获取到需要元素后需要把该元素赋值给新数组,慢指针就是用来更新数组的。快指针不断后移,当遇到和目标元素不同的元素时,就把该元素赋值给慢指针,更新后慢指针也后移。最后返回慢指针即为新数组长度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值