首先假设A[0]是一个极点.然后开始走阵列; A[i]依次比较每个元素A[0],并跟踪当前的最大值.
一旦你找到了i这样的东西A[i] < A[0],你知道它A[0]不再是一个极点,并且通过扩展,任何元素都不能包括在内A[i].所以现在继续走,直到找到比当前最大值更大的下一个值.这就成了新提出的极点.
因此,O(n)解决方案!
在代码中:
int i_pole = 0;
int i_max = 0;
bool have_pole = true;
for (int i = 1; i < N; i++)
{
if (A[i] < A[i_pole])
{
have_pole = false;
}
if (A[i] > A[i_max])
{
i_max = i;
if (!have_pole)
{
i_pole = i;
}
have_pole = true;
}
}
Run Code Online (Sandbox Code Playgroud)