LeetCode Search for a Range

来源:互联网 发布:mac可以远程控制吗 编辑:程序博客网 时间:2024/06/03 18:18

Description:

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

Solution:

Binary search.

We use a binary search to find the largest number that is smaller than target and the smallest number that is larger than target. Pay attention to the return number, especially the boundary condition.

public class Solution {public int[] searchRange(int[] nums, int target) {int maxSmaller = getMaxSmaller(nums, target);int minBigger = getMinBigger(nums, target);System.out.println(maxSmaller + "  " + minBigger);return new int[] { maxSmaller, minBigger };}int getMaxSmaller(int[] nums, int target) {int l = 0, r = nums.length - 1, mid;while (l + 1 < r) {mid = (l + r) / 2;if (nums[mid] >= target)r = mid;elsel = mid;}if (nums[l] == target)return l;if (l < nums.length - 1 && nums[l + 1] == target)return l + 1;return -1;}int getMinBigger(int[] nums, int target) {int l = 0, r = nums.length - 1, mid;while (l + 1 < r) {mid = (l + r) / 2;if (nums[mid] <= target)l = mid;elser = mid;}if (nums[r] == target)return r;if (r > 0 && nums[r - 1] == target)return r - 1;return -1;}}


0 0
原创粉丝点击