求数组中的峰值

2018-03-19  本文已影响27人  leon4ever

在一个由n个元素的整型数组中,找出符合以下两个条件的所有元素,要求时间复杂度为O(n);

  1. 该元素比它前面所有数都大
  2. 该元素比它后面所有数都小
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;
}
};

即便是做过的题,也还是错了。。。果然还是太菜了嘛

上一篇下一篇

猜你喜欢

热点阅读