思路
创建一个数组,大小和所求数组一样,
从右往左遍历原数组,将每一次遍历的最小值放入辅助数组,
最后再从左往右遍历原数组,每一次遍历的值如果和辅助数组中的相同位置的数相同,
那么这个数就是所求元素。
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
void fun(vector<int>& vec)
{
int len = vec.size();
vector<int> rvec(len, 0);
int min_val = vec[len - 1];
for (int i = len - 1; i >= 0; --i)
{
if (min_val > vec[i])
min_val = vec[i];
rvec[i] = min_val;
}
int max_val = vec[0];
for (int i = 0; i < len; ++i)
{
if (max_val < vec[i])
max_val = vec[i];
if (max_val == rvec[i])
cout << max_val << " ";
}
}
};
int main()
{
Solution s;
vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(5);
vec.push_back(2);
vec.push_back(7);
vec.push_back(9);
vec.push_back(12);
vec.push_back(16);
vec.push_back(18);
s.fun(vec);
}
如果找比左边小比右边大的元素,
比如:1,3,5,7,4,3,2,1
这是可以从左往右遍历原数组,将每次遍历的最小值放入辅助数组,
再从右往左遍历原数组,如果每一次遍历的值如果和辅助数组中的相同位置的数相同,
那么这个数就是所求元素。刚好和上面的相反。
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
void fun(vector<int>& vec)
{
int len = vec.size();
vector<int> rvec(len, 0);
int min_val = vec[0];
for (int i =0; i<len; ++i)
{
if (min_val > vec[i])
min_val = vec[i];
rvec[i] = min_val;
}
int max_val = vec[len-1];
for (int i = len-1; i >=0; --i)
{
if (max_val < vec[i])
max_val = vec[i];
if (max_val == rvec[i])
cout << max_val << " ";
}
}
};
int main()
{
Solution s;
vector<int> vec;
vec.push_back(41);
vec.push_back(23);
vec.push_back(15);
vec.push_back(11);
vec.push_back(10);
vec.push_back(9);
vec.push_back(8);
vec.push_back(7);
vec.push_back(5);
s.fun(vec);
}