题目来源:链接: [https://leetcode-cn.com/problems/peak-index-in-a-mountain-array/submissions/].
922.按奇偶排序数组II
1.问题描述
我们把符合下列属性的数组 A 称作山脉:
A.length >= 3
存在 0 < i < A.length - 1 使得
A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足
A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 的 i 的值。
示例 1:
输入:[0,1,0]
输出:1
示例2 :
输入:[0,2,1,0]
输出:1
注意:
1. 3 <= A.length <= 10000
2. 0 <= A[i] <= 10^6
3. A 是如上定义的山脉
2.我的解决方案
很简单的一个找最大值对应的下标问题,一个for循环解决
我提交的代码如下:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int i = 0;
for(i = 1; i < A.size(); i++)
{
if( (A[i-1] < A[i]) && (A[i] > A[i+1]) )
{
break;
}
continue;
}
return i;
}
};
执行用时: 20 ms, 在Peak Index in a Mountain Array的C++提交中击败了22.74% 的用户
内存消耗: 9.5 MB, 在Peak Index in a Mountain Array的C++提交中击败了0.89% 的用户
3.参考的大神的代码
这位大神的代码 的速度 在提交的人中排 第一。。。
方案:
static int fast_io = []() { std::ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
int low = 1, high = A.size() - 2;
while (low <= high) {
int mid = low + ((high - low) >> 1);
if (A[mid] > A[mid + 1]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return low;
}
};
4.我从这题中收获了哪些东西
待补
2019/3/5 胡云层 于南京 13