leetcode:Search for a Range
2014-06-16 00:29
423 查看
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
For example,
Given
return
给出一组排好序数组,和一个数字target,输出他在数组中的起始和终结下标;
如果没有,输出-1;
其实就是二分查找,但是要注意二分查找的边界设置,一个是要查到最左边的位置,一个是要查找到最右边的
位置
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].
给出一组排好序数组,和一个数字target,输出他在数组中的起始和终结下标;
如果没有,输出-1;
其实就是二分查找,但是要注意二分查找的边界设置,一个是要查到最左边的位置,一个是要查找到最右边的
位置
public class Solution { public int[] searchRange(int[] A, int target) { int find = findOne(A,target, 0,A.length - 1); int ans[] = new int[2]; int low = 0; int hight = A.length - 1; if(find == -1){ low = -1; hight = -1; } else{ low = find; hight = find; int temp = findLeft(A,target, 0, find - 1); if(temp != -1) low = temp; temp = findRight(A, target, find + 1, A.length - 1); if(temp != -1) hight = temp; } ans[0]= low; ans[1] = hight; return ans; } public int findOne(int[] arr, int target,int low,int hight){ while(low <= hight){ int mid = (low + hight) /2 ; if(arr[mid] == target){ return mid; } else if(arr[mid] < target){ low = mid + 1; } else { hight = mid - 1; } } return -1; } public int findLeft(int arr[], int target, int low , int hight){ int find = findOne(arr,target, low, hight); int temp = find; while(temp != -1){ find = temp; temp = findOne(arr,target,low, find - 1); } return find; } public int findRight(int arr[], int target, int low , int hight){ int find = findOne(arr,target, low, hight); int temp = find; while(temp != -1){ find = temp; temp = findOne(arr,target,find + 1, hight); } return find; } }
相关文章推荐
- leetcode -- Search for a Range (TODO)
- LeetCode Search for a Range
- LeetCode —— Search for a Range
- LeetCode | Search for a Range
- leetcode: Search for a Range
- LeetCode: Search for a Range
- [Leetcode 89] 34 Search for a Range
- LeetCode 38: Search for a Range
- Leetcode Search for a Range
- [LeetCode]Search for a Range
- [Leetcode] Search for a Range
- [LeetCode] Search for a Range
- [LeetCode] Search for a Range 解题报告
- LeetCode: Search for a Range
- leetcode 96: Search for a Range
- [LeetCode] Search for a Range
- [leetcode] Search for a Range
- [Leetcode] Search for a Range
- Leetcode: Search for a Range
- LeetCode - Search for a Range