LeetCode 34 Search for a Range

来源:互联网 发布:数据备份方式 编辑:程序博客网 时间:2024/06/10 08:51

原题:(频率3)

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].



题意:给一个升序数组,找到某target的开始和结束位置




代码和思路

class Solution {    public int[] searchRange(int[] nums, int target) {        int l=0,len=nums.length,r=len-1,mid=0;          int[] res = new int[2];          while(l<=r){            //>>1比 /2要快            mid = (l+r)>>1;            if(nums[mid]==target) break;            else if(nums[mid] > target){                r = mid - 1;            }            else l = mid + 1;        }        //上面的代码找到target后,还要进行重复数字的位置判断        if(l<=r){            //下面操作完后,l在target开始左边一位,r在结束右边一位            l = mid - 1;            while(l>=0 && nums[l]==nums[mid]) l--;            r = mid + 1;            while(r<len && nums[r] == nums[mid]) r++;            res[0]=l+1;              res[1]=r-1;          }else{              res[0]=-1;              res[1]=-1;          }          return res;            }}