一直做梦的猫

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

方法一:将数组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;

}

 

posted on 2013-05-13 15:58  一直做梦的猫  阅读(278)  评论(0)    收藏  举报