Problem: Given an array of integers A, please find three indexes i, j, k, such that i<j<k and A[i]<A[j]<A[k].
参考:http://codercareer.blogspot.com/2013/02/no-42-three-increasing-elements-in-array.html
数组问题画张图总是比较清晰。i和j连成的线要尽量接近X轴,这样K可选的范围就最大。
/* Copyleft: Ming Lin <minggr@gmail.com> */
#include <stdio.h>
void find_three_increase_elements(int data[], int n)
{
int m;
int i, j, k;
int t;
i = j = k = -1;
t = -1;
for (m = 0; m < n; m++) {
if (i == -1)
i = m;
else {
if (j == -1) {
if (data[m] <= data[i])
i = m;
else
j = m;
} else {
/* 3 cases */
if (data[m] > data[j]) {
k = m;
printf("i=%d, j=%d, k=%d\n", i, j, k);
return;
} else if (data[m] < data[j]) {
if (t != -1) {
i = t;
j = m;
t = -1;
} else {
t = m;
}
} else if (data[m] > data[i] && data[m] < data[j]) {
j = m;
}
}
}
}
}
int main()
{
int data[] = {3, 2, 5, 1, 4, 7, 9, 6, 8};
int n = 9;
find_three_increase_elements(data, n);
return 0;
}