方法一:将数组a[]排序为数组b[],比较两个数组,如果a[i]==b[i],则a[i]即为一个这样的数。时间复杂度为O(NlogN)。
方法二:维护两个数组min[]和max[],max[i]为a[i]左边的数的最大值,min[i]为a[i]右边的最小值,扫描两遍数组就可得到,再比较,如果max[i]<=a[i]<=min[i],则a[i]是一个这样的数。
void findElems(int arr[], int length) { int *maxL = new int[length]; int *minR = new int[length]; for(int i = 0; i < length; i++) { if(i == 0) { maxL[i] = arr[i]; }else { if(maxL[i - 1] < arr[i - 1]) { maxL[i] = arr[i - 1]; }else { maxL[i] = maxL[i - 1]; } } } for(int j = length - 1; j >= 0; j--) { if(j == length - 1) { minR[j] = arr[j]; }else { if(minR[j + 1] > arr[j + 1]) { minR[j] = arr[j + 1]; }else { minR[j] = minR[j + 1]; } } if(maxL[j] <= arr[j] && minR[j] >= arr[j] ) { cout << arr[j] << " "; } } cout << endl; }
浙公网安备 33010602011771号