LeetCode第 162 题:寻找峰值(C++)

it2026-08-09  3

162. 寻找峰值 - 力扣(LeetCode) 二分法:

class Solution { public: //相邻的数只有两种情况: // nums[mid] > nums[mid + 1] 或 nums[mid] < nums[mid + 1] int findPeakElement(vector<int>& nums) { int l = 0, r = nums.size()-1; while(l < r){ int mid = l + (r-l)/2; if(nums[mid] > nums[mid+1]) // 左边高,说明左边有峰值,可能mid就是 r = mid;// mid在下一次查找中还要考虑在内 else l = mid+1;// 右边高,说明在mid右边有峰值,所以mid一定不是 } return l; } };

或者这样会更好理解:

class Solution { public: //相邻的数只有两种情况: // nums[mid] > nums[mid + 1] 或 nums[mid] < nums[mid + 1] int findPeakElement(vector<int>& nums) { int l = 0, r = nums.size()-1; while(l < r){ int mid = l + (r-l)/2; if(nums[mid] > nums[mid+1]){ // 左边高,说明左边有峰值,可能mid就是 if(mid == 0 || nums[mid] > nums[mid-1]) return mid; else r = mid;// mid在下一次查找中还要考虑在内 } else{// 右边高,说明在mid右边有峰值,所以mid一定不是 if(mid+1 == nums.size()-1 || nums[mid+1] > nums[mid+2]) return mid+1; else l = mid+1; } } return l; } };
最新回复(0)