LeetCode - Search For a Range
2015-03-15 21:35
211 查看
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
For example,
Given
return
这道题蛮简单,最简单的就是遍历整个数组,时间复杂度O(n),但是这样比较慢,所以用binary search来找到一个值,然后往两边扩展,这样平均时间是O(lgn),最差是O(n)。
二分法代码如下:
还有一个改进是,在找到一个值后,继续二分法搜寻左右直到找到左右的边界,这样最差也是O(lgn)了,代码我没写,见这里:
http://fisherlei.blogspot.com/2013/01/leetcode-search-for-range.html
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(n),但是这样比较慢,所以用binary search来找到一个值,然后往两边扩展,这样平均时间是O(lgn),最差是O(n)。
二分法代码如下:
public int[] searchRange(int[] A, int target) { int[] rst = {-1, -1}; if(A==null || A.length==0) return rst; int left = 0, right = A.length-1; while(left<=right){ int mid=(left+right)/2; if(A[mid]==target){ int l = mid; while(l>0 && A[l-1]==target) l--; rst[0] = l; int r = mid; while(r<A.length-1 && A[r+1]==target) r++; rst[1] = r; return rst; } else if(A[mid]<target) left = mid+1; else right = mid-1; } return rst; }
还有一个改进是,在找到一个值后,继续二分法搜寻左右直到找到左右的边界,这样最差也是O(lgn)了,代码我没写,见这里:
http://fisherlei.blogspot.com/2013/01/leetcode-search-for-range.html
相关文章推荐
- 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