300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 力扣34-在排序数组中查找元素的第一个和最后一个位置(Java 二分 附思路)

力扣34-在排序数组中查找元素的第一个和最后一个位置(Java 二分 附思路)

时间:2019-02-11 12:10:01

相关推荐

力扣34-在排序数组中查找元素的第一个和最后一个位置(Java 二分 附思路)

思路:

用顺序查找很简单,但是logn解法就是用二分查找了,数组又是排好序的。

nums[mid]和target不一样的情况与普通的二分查找并无二致,要找target出现的前后位置,那肯定就只是在相等的时候想问题了。

nums[mid]==target时,说明此时的l和r已经缩小到一定范围了,接下来只需要对l与r的位置进行微调。那么调到什么程度呢?l<=mid,则nums[l]<=nums[mid],那么nums[l]只可能<=target,并且是<=target第一次出现的位置,不可能前面还有几个target,所以l要往后走,直到nums[l]==target。r部分同理。

所以再加两个循环就行了,因为这里是小范围循环,所以时间开销不大。

我学到了关于Java返回一个新数组的方式!

class Solution {public int[] searchRange(int[] nums, int target) {int l=0,r=nums.length-1;while(l<=r){int mid=l+(r-l)/2;if(nums[mid]<target){l=mid+1;}else if(nums[mid]>target){r=mid-1;}else{//nums[mid]==targetwhile(nums[l]<target)l++;while(nums[r]>target)r--;return new int[]{l, r};}}return new int[]{-1, -1};}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。