Search for a Range (Java)
2015-01-05 21:42
169 查看
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值里的其中之一,随便是哪一个都可以,然后把这个值loc当做新的边界进行左右遍历来确定左右边界,遍历还是用二分查找,只是low和high的移动的判断条件改为是否==target即可。注意何时return low何时return high。(一般找不到的时候返回比该数小的数时返回high,比该数大时返回low,这道题,找第一个为target的应该是比前面的大的,找最后一个target应该是比后面小的)
Source
Test
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值里的其中之一,随便是哪一个都可以,然后把这个值loc当做新的边界进行左右遍历来确定左右边界,遍历还是用二分查找,只是low和high的移动的判断条件改为是否==target即可。注意何时return low何时return high。(一般找不到的时候返回比该数小的数时返回high,比该数大时返回low,这道题,找第一个为target的应该是比前面的大的,找最后一个target应该是比后面小的)
Source
public class Solution { public int[] searchRange(int[] A, int target) { int[] a = {-1, -1}; if(A.length == 0) return a; int low = 0, high = A.length - 1; int loc = 0; while(low <= high){ int mid = low + ((high - low) >> 1); if(A[mid] > target) high = mid - 1; else if(A[mid] < target) low = mid + 1; else{ loc = mid; break; } } if(A[loc] != target) return a; //*** low = 0; high = loc; while(low <= high){ int mid = low + ((high - low) >> 1); if(A[mid] == target) //*** high = mid - 1; else low = mid + 1; } a[0] = low; low = loc; high = A.length - 1; while(low <= high){ int mid = low + ((high - low) >> 1); if(A[mid] == target) //*** low = mid + 1; else high = mid - 1; } a[1] = high; return a; } }
Test
public static void main(String[] args){ int[] num = {1,2,3,4,5,5,5,5,6,7,8}; int[] b = new Solution().searchRange(num, 5); System.out.println(b[0]); System.out.println(b[1]); }
相关文章推荐
- Search for a Range Java
- LeetCode 34 Search for a Range (C,C++,Java,Python)
- [LeetCode-Java]34. Search for a Range
- Search for a Range - Leetcode (Java)
- LeetCode : Search for a Range [java]
- [leetcode]34. Search for a Range(Java实现)
- Leet Code 34 Search for a Range - 搜索一个范围 - Java
- LeetCode(034) Search For a Range (Java)
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)
- 【LeetCode-面试算法经典-Java实现】【034-Search for a Range(搜索一个范围)】
- Search for a Range leetcode java
- LeetCode 34 — Search for a Range(C++ Java Python)
- Java for LeetCode 034 Search for a Range
- (java) Search for a Range
- (Java)LeetCode-34. Search for a Range
- Leetcode 34. Search for a Range (Medium) (java)
- leetcode-java-34. Search for a Range
- Java [leetcode 34]Search for a Range
- [LeetCode][Java] Search for a Range
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)