/* * O(n)时间内找出一个无序数组中的元素,该元素比前面的都大,比后面的都小,输出所有该特性的元素 */ void printNumber(int arr[], int num) { int tmpArr[num]; int k = 0, top = 0; for (int i = 0; i < num; i++) { if (i == num - 1) { break; } if (arr[i] < arr[i + 1] && arr[i] > top) { top = arr[i]; tmpArr[k] = arr[i]; k++; } else { if (arr[i] > top) { top = arr[i]; } while (k != 0 && tmpArr[k - 1] >= arr[i + 1]) { k--; } } } for (int i = 0; i < k; i++) { printf("%d ", tmpArr[i]); } } int main(int argc, const char * argv[]) { int arr[] = {1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 8, 9, 10, 8}; printNumber(arr, sizeof(arr) / sizeof(int)); }