Search for a Range

来源:互联网 发布:config.inc.php下载 编辑:程序博客网 时间:2024/05/18 23:12

题目地址:https://leetcode.com/problems/search-for-a-range/description/

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].

题目已经给出了数组有序的条件,很显然就是要用二分法。

import java.util.Arrays;public class SearchforRange {    public static int[] searchRange(int[] nums, int target) {        if (nums == null)            return null;        if (nums.length == 0)            return new int[]{-1, -1};        int left = 0;        int right = nums.length - 1;        int mid = left + (right - left) / 2;        boolean flag = false;        // Binary search.        while (left <= right) {            if (nums[mid] < target) {                left = mid + 1;                mid = left + (right - left) / 2;            } else if (nums[mid] == target) {                flag = true;                break;            } else {                right = mid -1;                mid = left + (right - left) / 2;            }        }        // expand the range to left and right from mid        if (flag) {            left = mid;            right = mid;            while (left - 1 >= 0) {                if (nums[left - 1] == target) {                    left = left - 1;                } else {                    break;                }            }            while (right + 1 <= nums.length - 1) {                if (nums[right + 1] == target) {                    right = right + 1;                } else {                    break;                }            }            return new int[] {left, right};        }        return new int[] {-1, -1};    }    public static void main(String[] args) {        int[] arr = new int[] {8};        System.out.println(Arrays.toString(searchRange(arr, 8)));        return;    }}
原创粉丝点击