问题
给定一个整数数组,找出一个索引,在这个索引之前所有的元素都比它小,所有的元素都比它大。
输入样本
[1, 2, 2, 4, 6, 9,, 9]
输出样本
3 (0-based indexing)
方法
我们可以在这个问题上创建两个辅助数组。一个数组将存储每个索引左边的最大元素,第二个数组将存储每个索引右边的最小元素。如果我们找到一个索引,其左边的最大元素小于当前索引的元素,其右边的最小元素大于当前元素,我们就得到了答案。这种方法的时间复杂度是O(N),所需的辅助空间也是O(N)
C 编程
#include <stdio.h>
#include <limits.h>
int max(int x, int y) { return (x > y) ? x : y; }
int min(int x, int y) { return (x < y) ? x : y; }
int solve(int arr[], int n)
{
int prefix[n];
prefix[0] = INT_MIN;
for (int i = 1; i < n; i++) {
prefix[i] = max(prefix[i - 1], arr[i - 1]);
}
int suffix[n];
suffix[n-1] = INT_MAX;
for (int i = n - 2; i >= 0; i--) {
suffix[i] = min(suffix[i + 1], arr[i + 1]);
}
for (int i = 1; i < n-1; i++)
{
if (prefix[i] < arr[i] && arr[i] < suffix[i]) {
return i;
}
}
return n;
}
int main()
{
int arr[] = {1, 2, 2, 4, 6, 9, 9 };
int n = sizeof arr / sizeof arr[0];
int ans = solve(arr, n);
if (ans >= 0 && ans < n) {
printf("The index is %d", ans);
}
else {
printf("Does not exists");
}
return 0;
}
输出
The index is 3
C++编程
#include <bits/stdc++.h>
using namespace std;
int solve(int arr[], int n)
{
int prefix[n];
prefix[0] = INT_MIN;
for (int i = 1; i < n; i++) {
prefix[i] = max(prefix[i - 1], arr[i - 1]);
}
int suffix[n];
suffix[n-1] = INT_MAX;
for (int i = n - 2; i >= 0; i--) {
suffix[i] = min(suffix[i + 1], arr[i + 1]);
}
for (int i = 1; i < n-1; i++)
{
if (prefix[i] < arr[i] && arr[i] < suffix[i]) {
return i;
}
}
return n;
}
int main()
{
int arr[] = {1, 2, 2, 4, 6, 9, 9 };
int n = sizeof arr / sizeof arr[0];
int ans = solve(arr, n);
if (ans >= 0 && ans < n) {
cout<<"The index is "<<ans;
}
else {
cout<<"Does not exists";
}
return 0;
}
输出
The index is 3
Python编程
import sys
def solve(A):
n = len(A)
prefix = [None] * n
prefix[0] = -sys.maxsize
for i in range(1, n):
prefix[i] = max(prefix[i - 1], A[i - 1])
suffix = [None] * n
suffix[n-1] = sys.maxsize
for i in reversed(range(n - 1)):
suffix[i] = min(suffix[i + 1], A[i + 1])
for i in range(1, n-1):
if prefix[i] < A[i] < suffix[i]:
return i
return n
A = [1, 2, 2, 4, 6, 9, 9 ]
ans = solve(A)
if 0 <= ans < len(A):
print("The index is", ans)
else:
print("Does not exists")
输出
The index is 3