时间轴
时间轴
2025-12-04
init
分治
题目:
和寻找峰值类似。
123456789101112131415161718192021222324252627282930313233343536373839 | using std::vector;class Solution { private: bool isLowest(vector<int> &nums, int index) { int n = nums.size(); if (index > 0 && nums[index] < nums[index - 1]) { return true; } else if (index == 0 && nums[index] < nums[n - 1]) { return true; } return false; } public: int findMin(vector<int> &nums) { int n = nums.size(); int left = 0, right = n - 1; int mid; while (left <= right) { mid = left + (right - left) / 2; if (isLowest(nums, mid)) { return nums[mid]; } if (nums[mid] > nums[right]) { left = mid + 1; } else if (nums[mid] < nums[left]) { right = mid - 1; } else { // nums[left]<= nums[mid] <= nums[right] return nums[left]; } } return nums[0]; }}; |
leetcode hot 100 rewrite
1234567891011121314151617181920212223242526272829303132333435363738 | using std::vector;class Solution { public: int findMin(vector<int> &nums) { // n == nums.length // 1 <= n <= 5000 // -5000 <= nums[i] <= 5000 // nums 中的所有整数 互不相同 // nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转 int n = nums.size(); int left = 0, right = n - 1, mid = 0; if (nums[0] <= nums[n - 1]) // 旋转了n次 return nums[0]; while (left <= right) { mid = left + (right - left) / 2; if (mid > 0 && nums[mid - 1] > nums[mid]) return nums[mid]; if (nums[left] < nums[right]) { right = left; } else { if (nums[mid] > nums[right]) left = mid + 1; else right = mid; } } return nums[mid]; }}; |
