[Leetcode] Search for a Range
2014-10-18 05:39
381 查看
题目:
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(log n),只能是二分法。具体方法是先用一次二分法找到target所在位置,然后在这个位置开始向左向右再做两次二分,找到边界。
总结:复杂度为O(log n).
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(log n),只能是二分法。具体方法是先用一次二分法找到target所在位置,然后在这个位置开始向左向右再做两次二分,找到边界。
class Solution { public: vector<int> searchRange(int A[], int n, int target) { int lower_bound = 0; int upper_bound = n - 1; vector<int> result(2, -1); int index = -1; while (lower_bound <= upper_bound) { int mid = (lower_bound + upper_bound) / 2; if (A[mid] == target) { index = mid; break; } else if (A[mid] < target) { lower_bound = mid + 1; } else { upper_bound = mid - 1; } } if (index < 0) return result; lower_bound = 0; upper_bound = index; int left_index = index; while (lower_bound <= upper_bound) { int mid = (lower_bound + upper_bound) / 2; if ((mid == 0 && A[mid] == target) || (mid > 0 && A[mid] == target && A[mid-1] != target)) { left_index = mid; break; } else if (A[mid] == target) { upper_bound = mid - 1; } else { lower_bound = mid + 1; } } lower_bound = index; upper_bound = n - 1; int right_index = index; while (lower_bound <= upper_bound) { int mid = (lower_bound + upper_bound) / 2; if ((mid == n - 1 && A[mid] == target) || (mid < n - 1 && A[mid] == target && A[mid+1] != target)) { right_index = mid; break; } else if (A[mid] == target) { lower_bound = mid + 1; } else { upper_bound = mid - 1; } } result[0] = left_index; result[1] = right_index; return result; } };
总结:复杂度为O(log n).
相关文章推荐
- 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