【LeetCode OJ 34】Search for a Range

来源:互联网 发布:金融征信软件 编辑:程序博客网 时间:2024/06/15 13:51

题目链接:https://leetcode.com/problems/search-for-a-range/

题目: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].

解题思路:题意为在一个有序数组中寻找指定值的起始位置和结束位置,因为题目要求时间复杂度为O(log n),故而想到使用二分查找法。

示例代码:

public class Solution { public int[] searchRange(int[] nums, int target)  {        int[] result=new int[]{-1,-1};        int start=0;        int end=nums.length-1;        while(start<=end)        {        int middle=(start+end)>>1;        int middleValue=nums[middle];        if(middleValue==target)        {        //找到目标值后,先搜索其左边有没有与目标值相等的数,取其最左边的索引值放入result中,同理再搜索其最右边        int i=middle;        while((i-1)>=0&&nums[i-1]==target)        {        i--;        }        result[0]=i;        int j=middle;        while((j+1)<nums.length&&nums[j+1]==target)        {        j++;        }        result[1]=j;        return result;        }        else if(target<middleValue)              {                  //小于中值时在中值前面找                  end=middle-1;              }              else              {                  //大于中值在中值后面找                  start=middle+1;             }                }        return result; }}


0 0
原创粉丝点击