leetcode162, 寻找峰值

ifndef冬瓜 2018-09-04 03:02:31

int findPeakElement(vector<int>& nums) {
if(nums.size()==1||nums[0]>nums[1])
return 0;
int a = 0, b = nums.size()-1;
int mid = a + (b - a) / 2;
while(a < b)
{
if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1])
return mid;
else if(nums[mid] < nums[mid-1])
b = mid;
else
a = mid+1;
mid = a + (b - a) / 2;
}
if(a == b && nums[a] > nums[a-1])
return a;
}

在leetcode代码界面执行时,输入测试用例为[-2,-1]时提示函数没有返回值???但是我放到其它ide上测试,结果就正常,不知道是什么问题??
...全文
173 点赞 收藏 6
写回复
6 条回复
NexTor 2018年09月06日
你参考一下网上别人的解题方法吧,感觉你的思路有点想复杂了,简单的二分查找就好了。
public class Solution {
public int findPeakElement(int[] nums) {
int i=0, j=nums.length-1;
while (i<j) {
int m = (i+j)/2;
if (nums[m] > nums[m+1]) j=m; else i=m+1;
}
return i;
}
}
回复 点赞
ifndef冬瓜 2018年09月06日
引用 3 楼 NexTor 的回复:
你这代码逻辑有问题吧
如果[-2,-1]输入,a=0,b=1,mid=0
if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1])这行代码中nums[mid] > nums[mid-1]会是nums[0]>nums[-1]的比较,数组越界了吧,而且你这代码在某些情况下确实也没有返回值。

不过除了这个越界的原因,会有哪种情况使他没有返回值呢、
回复 点赞
ifndef冬瓜 2018年09月06日
引用 3 楼 NexTor 的回复:
你这代码逻辑有问题吧
如果[-2,-1]输入,a=0,b=1,mid=0
if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1])这行代码中nums[mid] > nums[mid-1]会是nums[0]>nums[-1]的比较,数组越界了吧,而且你这代码在某些情况下确实也没有返回值。

嗯,确实是越界了
回复 点赞
NexTor 2018年09月05日
你这代码逻辑有问题吧
如果[-2,-1]输入,a=0,b=1,mid=0
if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1])这行代码中nums[mid] > nums[mid-1]会是nums[0]>nums[-1]的比较,数组越界了吧,而且你这代码在某些情况下确实也没有返回值。

回复 点赞
ifndef冬瓜 2018年09月04日
有没有人指点一下
回复 点赞
ifndef冬瓜 2018年09月04日
贴一下题目:
峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 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) 时间复杂度的。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告