162. 寻找峰值(二分 logn)
Posted vampire6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了162. 寻找峰值(二分 logn)相关的知识,希望对你有一定的参考价值。
162. 寻找峰值
第一种想到O(n)解法,直接for循环遍历求出最大值的下标输出即可:
class Solution { public: int findPeakElement(vector<int>& nums) { if(nums.size()<=1) return 0; int a=nums[0],ans=0; for(int i=1;i<nums.size();i++) { if(nums[i]>a) { ans=i; a=nums[i]; } } return ans; } };
第二种想到O(longn)的,二分找最大值,不断缩小范围:
class Solution { public: int findPeakElement(vector<int>& nums) { if(nums.size()<=1) return 0; int left=0,right=nums.size()-1; while(left<right) { int mid=(left+right)/2; if(nums[mid]>nums[mid+1]) right=mid; else left=mid+1; } return left; } };
以上是关于162. 寻找峰值(二分 logn)的主要内容,如果未能解决你的问题,请参考以下文章