题目描述:

峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞

示例 1:

输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。

示例 2:

输入: nums = [1,2,1,3,5,6,4]
输出: 1 或 5
解释: 你的函数可以返回索引 1,其峰值元素为 2;
  或者返回索引 5, 其峰值元素为 6。

说明:

你的解法应该是 O(logN) 时间复杂度的。

要完成的函数:

int findPeakElement(vector<int>& nums)

说明:

1、给定一个vector,里面装着多个int类型的数据,保证相邻的数据不相等。

要求返回vector的峰值,也就是某一个点的数值大于其左边的数值和右边的数值,返回这个点的位置。

vector可能有多个峰值,找到其中一个就可以了。

要求时间复杂度是O(logN)级别的。

2、本来这道题如果没有规定时间复杂度的话,我应该是逐个判断的。

给定限制,反而提供了思路。

以后做这种寻找vector中满足条件的某个数的题目,都可以考虑用二分法降低时间复杂度。

代码如下:(附详解)

    int findPeakElement(vector<int>& nums)
{
int left=0,right=nums.size()-1,mid;
if(nums.size()==1)return 0;//边界情况,只有一个元素在vector中
while(left<=right)//当left大于right的时候,结束循环,完全找不到满足条件的元素
{
mid=(left+right)/2;
if(mid==0)//边界情况,如果mid等于0,那么只需判断是不是大于右边,如果不是,那么改变left的值
{
if(nums[mid]>nums[mid+1])
return mid;
else
left=mid+1;
}
else if(mid==nums.size()-1)//同样边界情况
{
if(nums[mid]>nums[mid-1])
return mid;
else
right=mid-1;
}
else//mid在vector的里面(不会在最左边也不会在最右边)
{
if(nums[mid]>nums[mid-1]&&nums[mid]>nums[mid+1])//满足条件
return mid;
else if(nums[mid]<nums[mid-1])//比左边小,那么更改right的值,进行左边这一半的寻找
right=mid-1;
else if(nums[mid]<nums[mid+1])//比右边小,那么更改left的值,进行右边这一半的寻找
left=mid+1;
}
}
}

上述代码实测4ms,beats 98.57% of cpp submissions。

最新文章

  1. Linux下定时执行任务的几种方式
  2. mysql数据库及oracle数据库的定时备份
  3. JS 保留两位小数问题收集
  4. Openstack的计算节点的nova-network异常中止及实例无法删除排错过程
  5. Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()
  6. java集合总结
  7. Android中的EditText默认时不弹出软键盘的方法
  8. NYOJ2括号配对问题
  9. linux下服务器管理
  10. C#常用語法糖(Csharp Syntactic sugar)
  11. mysql存储过程和触发器的应用
  12. Python 2.7 学习笔记 访问mysql数据库
  13. HDU - 1865 1string(大数)
  14. 机器人局部避障的动态窗口法(dynamic window approach) (转)
  15. JAVA - 深入JAVA 虚拟机 3
  16. [转]HDFS HA 部署安装
  17. HHVM源码剖析
  18. jquery 记住账号 记住密码
  19. U盘文件被隐藏
  20. [pycocotools修改]cocoeval.py

热门文章

  1. hdu-1131(卡特兰数+大数)
  2. 22. Valuing Water 珍惜水资源
  3. Shell 中expr的使用
  4. IntelliJ IDEA 2017版 SpringBoot的关闭自动配置和自定义Banner
  5. UVa 11167 Monkeys in the Emei Mountain (最大流)
  6. UVa 11384 Help is needed for Dexter (递归)
  7. 机器学习 数据预处理之独热编码(One-Hot Encoding)
  8. (求树的直径)Warm up -- HDU -- 4612
  9. (网络流 模板)A Plug for UNIX -- poj -- 1087
  10. The First Android App----Adding the Action Bar