540.有序数组中的单一元素(力扣leetcode) 博主可答疑该问题

一、笔记部分

这种含有出现关键字,而且还有有序的时候,一般不会用哈希表,一般是无序统计出现次数才会用哈希表。

直接用HashMap 取搞就没有意思了,那么有序就根本没有用用到了。

中间的数要么和左边相等,要么和右边相等。看左右边元素没有什么用,因为你进行了第一次比较后不知道往那边走了,看元素是否等于中间元素,里面的if条件无法写,因为根本单个元素到底在那边数组我们是不知道。

因为用二分法一定要知道找到中间元素元素后,通过if判断我们要知道我们到底下一步走那一边,不知道的话,还不如直接遍历。二分法只要是通过判断中间元素从而知道我们走那边。

 

我上面的想法能找出一对来,已经走了一大步了。取出一对后,剩下两个数组包含的数量肯定一个为奇数、一个为偶数,这样就会找的出来了,尽量不要用旁边的两个元素和中间元素比较,因为数组比较越多越容易越界。

 

正确思路:

1.把握好只有一个奇数,其他都是成对,那么数组肯定是奇数,但是数组是从0开始,所以首位和末尾都是偶数,取中间值的时候有偶数有奇数,偶数下标就是成对的第一位是数,所以如果中间索引是奇数那么就要-1,变成偶数判断与后一个数是否相等。

2.如果相等,说明单位数在后面,如果不相等,说明单位数在前面闭区间(因为可能就是这个单位数)

 

所以二分查找这些区间的l、r是非常灵活的,根据你自己的要求选择

为什么最后重合了是单个元素?

因为每次确定了中间元素,然后选择数组,都是选择的是奇数数组,所以最后肯定只剩下一个元素。最后一个分组肯是三个。

 

二、二分法类型的高频面试题汇总:

https://blog.csdn.net/qq_40262372/article/details/112572853

 

三、各种类型的高频面试题汇总:

https://blog.csdn.net/qq_40262372/article/details/112556249

 

四、如有疑问可加QQ群讨论:725936761 博主免费答疑

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万小猿

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值