Day1 LeetCode 704.二分查找 27.移除元素

704.二分查找

题目链接:力扣

文章讲解:代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

看完随想录之后的想法

两种情况1.左闭右闭 [ ]  2.左闭右开 [ ) 

当定义时为左闭右闭时,while中if的条件可以把边界排除

if(nums[middle] > target){
    right = middle - 1;
    }
if(nums[middle] < target){
    left = middle + 1;
    }
    

因为middle位置上的元素不可能包含target,下一次循环依然和定义的左闭右闭一样

当定义为左闭右开时,right位置上的元素不可能包含target,所以条件定义为

if(nums[middle] > target){
    right = middle ;
    }
if(nums[middle] < target){
    left = middle + 1;
    }
    

左开右闭好像不行

因为middle总落在靠left的位置(差值为单数)

循环中middle的值

right与left的差值为单数时middle落在中间靠left这边,差值为双数时middle落在正中间

相关的35.34        可以在看完代码之后在纸上演算一遍,帮助理解代码

27.移除元素

题目链接:力扣

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

数组可以覆盖,删除不了

看完视频很神奇

双指针        fast指针遍历一遍所有元素,slow指针覆盖之后自加

自己的拓展

数学移位

二进制的左移右移

  int middle = left + ((right - left) >> 1);

此处 >> 1 的作用相当于除二

班助的解释

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

自己的理解

十进制数字转换为二进制,然后右移一位,之后转换回十进制,相当于除二不加余数

自己的困难

1.代码错误        

2.草稿上笔记乱

3.整理思路的时候乱

改进

1.看完题记录自己想法和思路,不急着看解析

2.写博客先输出,先想到啥写啥(尝试)

3.草稿保留好思路和想法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值