[LeetCode] Search for a Range

来源:互联网 发布:伪娘专用阴茎套淘宝 编辑:程序博客网 时间:2024/05/16 01:53

问题:

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

分析:

明显是要用binary search。我的方法是,先找下界,再找上界,用两个不同的函数。

代码:

class Solution {public:int searchLower(int A[], int start, int end, int target) {if (start > end)return -1;if (start == end) {if (A[start] != target)return -1;return start;}int mid = start + (end - start) / 2;if (mid == 0) {if (A[0] == target)return 0;if (A[0] > target)return -1;if (A[0] < target)return searchLower(A, mid + 1, end, target);}if (A[mid] == target && A[mid - 1] < target) return mid;if (A[mid] < target) return searchLower(A, mid + 1, end, target);if (A[mid] >= target) return searchLower(A, start, mid - 1, target);}int searchUpper(int A[], int n, int start, int end, int target) {if (start > end)return -1;if (start == end) {if (A[start] == target)return start;return -1;}int mid = start + (end - start) / 2;if (mid == n-1) return searchUpper(A, n, mid, mid, target);if (A[mid] == target && A[mid + 1] > target) return mid;if (A[mid] <= target) return searchUpper(A, n, mid + 1, end, target);if (A[mid] > target) return searchUpper(A, n, start, mid - 1, target);}vector<int> searchRange(int A[], int n, int target) {vector<int> result (2, -1);int l = searchLower(A, 0, n-1, target);int u = searchUpper(A, n, 0, n-1, target);result[0] = l;result[1] = u;return result;}};


0 0
原创粉丝点击