代码随想录|leetcode刷题|C语言|Day1|704二分查找|27移除元素

704.二分查找

这个题做过不止一次了。

思路就是用左右指针定界,判断中间值和目标值是否相等,然后再不断缩小范围,直到两指针相遇。

但是!思路我都懂,每次都会被边界条件绕晕!

今天做完以后整理了一下容易疑惑的地方:

1.关于“左开右闭,左开右开”

为什么会有这个问题呢,重点在于数组长度:numsSize

众所周知,数组下标是从0开始的,所以最后一个元素下标其实是numsSize-1

设置左右指针的时候,左指针无异议是0,右指针在这里就分出了两种思路:选numsSize或者numsSize-1。前者就是左闭右闭,后者就是左闭右开。左闭右闭定的区间是从left到right的所有元素(包含right),而左闭右开定的区间是从left到right的所有元素(不包含right)。

2.两种思路的区别:

1>while循环判断的条件不同:

在左闭右闭的情况下,是while(left<=right),因为right指向的元素包含在区间里,所以如果两个指针相遇了,需要再判断一次才能结束。

而左闭右开的情况下,是while(left<right),right指向的元素不包含在区间里,指针即使相遇了,也无需判断。

2>第二轮定界时指针的位置不同:

在左闭右闭的情况下,若target>mid,那么left=mid+1;若target<mid,那么right=mid-1;因为mid的值已经经过一次检查了,不必再包含进下一个检查区间了。

而左闭右开的情况下,若target>mid,那么left=mid+1;若target<mid,那么right=mid;因为right本来就不包含在检查区间里。

3.可以优化的地方:

1>整数溢出避免:在取mid的时候,最容易想到的就是(left+right)/2了,但是在n很大的情况下,left+right可能会溢出,所以可以采用left+(right-left)/2来避免溢出,提高代码健壮性。

2>在开头可以判断一下numsSize的特殊情况0和1,

每次进入循环前判断一下target是否等于left或者right,就不用循环找了,可以提高效率。

27.移除元素

经典的考察数组增删改查的题目。

数组删除元素的时候不能像链表一样方便可以直接删掉改一下指针就行了,必须要把后面的元素一个一个往前挪,就像排队的时候有一个人离开了,后面的人都要依次往前。有很多人离开了的话,这个往前挪的操作就要执行很多次,非常繁琐。

那么,有没有更好的办法呢?当然有。

在遍历的过程中,当数组中一个元素被删除的时候,可以先不急着把后面的元素前移补上。可以用一个指针记录下这个位置,等后面有不需要被删掉的元素的时候,直接把它移过来,然后指针再后移一位,持续这个操作。到最后,因为指针总是比当前的元素前一位,此时指针指向的位置下标,刚好就是删完以后的元素个数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
<h3>回答1:</h3><br/>1. 首先,你需要在VS Code中安装LeetCode插件。打开VS Code,点击左侧的“扩展”图标,搜索“LeetCode”,然后点击“安装”按钮。 2. 安装完成后,你需要登录你的LeetCode账号。点击左侧的“LeetCode”图标,然后点击“登录”按钮。输入你的LeetCode账号和密码,然后点击“登录”按钮。 3. 登录成功后,你可以开始刷题了。点击左侧的“LeetCode”图标,然后点击“题库”按钮。在题库中选择你想要刷的题目,然后点击“开始”按钮。 4. 在刷题过程中,你可以使用VS Code提供的一些功能,比如自动补全、代码提示、代码格式化等。这些功能可以帮助你更快地完成题目。 5. 刷完题目后,你可以提交你的代码并查看测试结果。点击左侧的“LeetCode”图标,然后点击“提交”按钮。输入你的代码,然后点击“提交”按钮。稍等片刻,你就可以看到测试结果了。 总之,使用VS Code安装LeetCode插件刷题非常方便,可以帮助你更快地提高算法能力。 <h3>回答2:</h3><br/>VS Code是一个很流行的开发工具,LeetCode是很多程序员用来刷算法题的平台。在VS Code中安装LeetCode插件可以提供更好的刷题体验,还可以方便地保存和管理自己的代码。 下面是以Windows系统为例介绍在VS Code中安装LeetCode插件的步骤: 第一步:安装VS Code 在官网下载安装VS Code,https://code.visualstudio.com/ 第二步:打开Extensions标签 点击左侧菜单栏中的Extensions标签,在搜索框中输入“LeetCode”。 第三步:安装LeetCode插件 在搜索结果中,找到LeetCode插件并点击“Install”安装。 第四步:配置LeetCode插件 安装完毕后,配置LeetCode插件。点击左侧菜单栏中的“LeetCode”标签,根据提示进行配置。 第五步:使用LeetCode插件 在左侧菜单栏中的“LeetCode”标签下,点击“Problems”即可进入刷题页面。 总结:安装LeetCode插件可以为刷题提供更好的开发环境和代码管理工具,操作简便,适合程序员们使用。 <h3>回答3:</h3><br/>VSCode是一款功能强大的代码编辑器,不仅支持多种编程语言,还能通过插件进行扩展,其中包括LeetCode刷题插件。安装LeetCode插件,可以大大提升刷题效率和舒适度。安装LeetCode插件,大致可以分为以下几个步骤: 1. 安装VSCode:首先需要下载并安装VSCode,可以从官网(https://code.visualstudio.com/)获取。 2. 安装LeetCode插件:在VSCode中打开“扩展”选项卡,搜索“LeetCode”,找到对应的插件,点击“安装”。 3. 配置LeetCode插件:在VSCode中点击左下角的“LeetCode插件设置”按钮,进入插件的配置页面。在这里可以设置LeetCode的默认语言、代码保存目录、登录账号等信息。 4. 登录LeetCode账号:在配置页面中设置好账号信息后,可以点击登录按钮,跳转到LeetCode的官网,进行账号登录。 5. 开始刷题:在LeetCode插件的“输入问题编号”处输入题目编号,点击“搜索”即可进入题目页面,进行刷题操作。LeetCode插件还提供了多种题目操作,如代码提交、答案对比、题目复制等功能,可根据需求进行使用。 总之,安装LeetCode插件需要一些简单的操作步骤和注意事项,但对于提高刷题效率来说是非常方便实用的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_57857068

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值