[Leetcode] Search for a Range
来源:互联网 发布:古墓丽影9a卡优化补丁 编辑:程序博客网 时间:2024/04/29 08:31
class Solution {public: vector<int> searchRange(int a[], int n, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> res(2); res[0] = findLeft(a, n, target); res[1] = findRight(a, n, target); return res; } int findLeft(int a[], int n, int target) { int left = 0; int right = n; while (left <= right) { int mid = left + (right - left) / 2; if (getVal(a, n, mid) == target && getVal(a, n, mid - 1) < target) return mid; else if (getVal(a, n, mid) >= target) right = mid - 1; else left = mid + 1; } return -1; } int findRight(int a[], int n, int target) { int left = -1; int right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (getVal(a, n, mid) == target && getVal(a, n, mid + 1) > target) return mid; else if (getVal(a, n, mid) > target) right = mid - 1; else left = mid + 1; } return -1; } int getVal(int a[], int n, int idx) { if (idx == -1) return INT_MIN; else if (idx == n) return INT_MAX; else return a[idx]; }};