leetcode 寻找峰值 中等
Posted Wh1t3zZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 寻找峰值 中等相关的知识,希望对你有一定的参考价值。
题目要求复杂度 logn,很容易就想到二分了。
然后,二分怎么移动 l,r 呢?其实也挺容易猜到的:如果 nums[mid] < nums[mid + 1],l = mid + 1,反之 r = mid - 1;
正确性说明:如果 nums[mid] < nums[mid + 1],那么右边一定是有峰值的,最坏情况也就是峰值在 nums.size() - 1 这个位置,由于题目说了 nums[n] 看做 -∞,所以必有答案;
class Solution { public: int findPeakElement(vector<int>& nums) { int l = 0, r = nums.size() - 1; while(l <= r) { int mid = (l + r) >> 1; bool tag1 = (mid == 0) || (nums[mid] > nums[mid - 1]); bool tag2 = (mid == nums.size() - 1) || (nums[mid] > nums[mid + 1]); if(tag1 && tag2) return mid; if(nums[mid] < nums[mid + 1]) { l = mid + 1; } else { r = mid - 1; } } return -1; } };
以上是关于leetcode 寻找峰值 中等的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—162. 寻找峰值(滑动窗口)—day39
Leetcode刷题100天—162. 寻找峰值(滑动窗口)—day39