int hIndex(vector<int> &citations) { int length = citations.size(); int left = 0, right = length - 1; while (left <= right) { int mid = left + ((right - left) >> 1); if (citations[mid] >= length - mid) { right = mid - 1; } else { left = mid + 1; } } return length - left; }
class Solution {public: int searchInsert(vector<int> &nums, int target) { if (nums.empty()) { return -1; } int left = 0, right = nums.size() - 1; int index = -1; while (left <= right) { int mid = left + ((right - left) >> 1); if (nums[mid] >= target) { index = mid; right = mid - 1; } else if (nums[mid] < target) { left = mid + 1; } else { return mid; } } return index == -1 ? nums.size() : index; }};
class Solution {public: vector<int> sortedSquares(vector<int> &nums) { int n = nums.size(); vector<int> res(n); int left = 0, right = n - 1; int index=n-1; while (left <= right) { if (abs(nums[left]) < abs(nums[right])) { res[index--] = nums[right] * nums[right]; right--; } else { res[index--] = nums[left] * nums[left]; left++; } } return res; }};