leetcode 34. Search for a Range

来源:互联网 发布:免费淘宝开店教程视频 编辑:程序博客网 时间:2024/05/18 14:14
import java.util.Stack;//Given a sorted array of integers, 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].public class Solution { public static void main(String[] args) {int[] input = {0,0,0};int target = 2;int[] result = searchRange(input,target);System.out.println(result[0]+" "+result[1]);}public static int[] searchRange(int[] nums, int target) {        int left = 0;        int right = nums.length-1;        int[] result = {-1,-1};        while(left<right){//变形的二分查找        int mid = (left+right)/2;        if(nums[mid]<target){//提升l的值        left = mid+1;        }else if(nums[mid]>=target){//若相等则将r值等于m        right = mid;        }        }        if(nums[left] == target){//若nums[l]=target,则匹配,l必为第一次出现的target脚标        result[0] = left;        }        right = nums.length-1;//left已经确定,只需重新定义right即可        while(left<right){        int mid = (left+right)/2+1;        if(nums[mid]>target){        right = mid-1;        }else if(nums[mid]<=target){        left = mid;        }        }        if(nums[right] == target){        result[1] = right;        }        return result;    }}

0 0