Let's call an array A a mountain if the following properties hold:
A.length >= 3
- There exists some
0 < i < A.length - 1
such thatA[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
- Given an array that is definitely a mountain, return any
i
such thatA[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
.
Example 1:
Input: [0,1,0]
Output: 1
Example 2:
Input: [0,2,1,0]
Output: 1
Note:
- 3 <= A.length <= 10000
- 0 <= A[i] <= 10^6
- A is a mountain, as defined above.
简单题,就理解成找最大值的index
Moutain
都是先上后下的一个形状,对下降的那个节点做判断就能得出结果
算法复杂度(O(n))
int peakIndexInMountainArray(vector<int>& A) {
int i = 1;
while (i <= A.size())
{
if (A.at(i-1) > A.at(i))
{
return i-1;
}
++i;
}
}
这样提交上去的结果不是很好,做一些修改
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
int peakIndexInMountainArray(vector<int>& A) {
for (int i = 1; i <= A.size(); i++)
{
if (A.at(i-1) > A.at(i))
{
return i-1;
}
}
}
};
还可以直接找最大值的index,甚至都不用自己写,直接调函数,这样就beat 100.00%了
int peakIndexInMountainArray(vector<int>& A)
{
vector<int>::iterator max_iter = max_element(A.begin(), A.end());
return distance(A.begin(), max_iter);
}
LeetCode上其他的解法有用二分的,理论上要快点,这里就不写了