540. 有序数组中的单一元素

2020-08-16  本文已影响0人  含泪若笑

这道题用二分查找的话需要注意间隔,因为有相同的元素在一起,还有就是要判断好单个的元素在哪里。

第一种我看了官方的,觉得比较容易理解和想到,就实现了一下:

思路就是判断中间元素是和前一个相等还是后面的相等,

1 如果和后面的相等,后面的元素以middle为分界点还是偶数个的话,那就说明单个元素在后面,因为我们需要去掉middle的下一个元素去考虑;

2 如果和前面的相等,后面的元素以middle为分界点还是偶数个的话,那就说明单个元素在前面。

代码:

https://github.com/hanleirx/LeetCode/blob/master/540.%20%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E5%8D%95%E4%B8%80%E5%85%83%E7%B4%A0-1

方法2,方法中始终使m处于偶数的位置,做了这样一个处理之后,就会减少一些逻辑判断,比如,当m和下一个位置相等时,那单个的数字一定在右面。 这里还有一个注意点是不相等的处理,我们不能把边界值设置为减一,这个是因为这个值和前面并没有做比较,所以我们把它算进去。

代码:

https://github.com/hanleirx/LeetCode/blob/master/540.%20%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E4%B8%AD%E7%9A%84%E5%8D%95%E4%B8%80%E5%85%83%E7%B4%A0-2

上一篇下一篇

猜你喜欢

热点阅读