求数组中的峰值
2018-03-19 本文已影响27人
leon4ever
在一个由n个元素的整型数组中,找出符合以下两个条件的所有元素,要求时间复杂度为O(n);
- 该元素比它前面所有数都大
- 该元素比它后面所有数都小
class Solution{
public:
vector<int> find(vector<int>& nums){
vector<int> result;
if(nums.empty())
return result;
const int length = nums.size();
vector<int> helpmin(length);
int minvalue = nums[length-1];
//注意此处循环是不能判断nums[i],因为找到是这个位置之后的最小值。。弱智吗
for(int i = length-2; i>=0; --i){
minvalue = minvalue<nums[i+1]?minvalue:nums[i+1];
helpmin[i] = minvalue;
}
int maxvalue = nums[0];
for(int i = 1; i< length; ++i){
maxvalue = maxvalue>nums[i-1]?maxvalue:nums[i-1];
if(nums[i]>maxvalue && nums[i]<helpmin[i])
result.push_back(nums[i]);
}
return result;
}
};
即便是做过的题,也还是错了。。。果然还是太菜了嘛