LeetCode 34 Search for a Range

来源:互联网 发布:淘宝茶叶店模板 编辑:程序博客网 时间:2024/05/29 11:42

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

bug free, 两个二分法解决。时间复杂度为O(logn), 比暴力搜素O(N)方式要稍微好一些。这一题目面试时出现,应该不会让使用暴力搜索的方式去解决。

public class Solution {    public int[] searchRange(int[] nums, int target) {        if (nums == null || nums.length == 0) {            return new int[] {-1, -1};        }        return search(nums, target);    }    private int[] search(int[] nums, int target) {        int start = 0, end = nums.length - 1;        int left, right;        while (start + 1 < end) {            int mid = start + (end - start) / 2;            if (target > nums[mid]) {                start = mid;            } else {                end = mid;            }        }        if (nums[start] == target) {            left = start;        } else if (nums[end] == target) {            left = end;        } else {            left = -1;        }        start = 0;        end = nums.length - 1;        while (start + 1 < end) {            int mid = start + (end - start) / 2;            if (target < nums[mid]) {                end = mid;            } else {                start = mid;            }        }        if (nums[end] == target) {            right = end;        } else if (nums[start] == target) {            right = start;        } else {            right = -1;        }        return new int[] {left, right};    }}
0 0
原创粉丝点击