现在的位置: 首页 > 综合 > 正文

快排变种题

2018年01月10日 ⁄ 综合 ⁄ 共 455字 ⁄ 字号 评论关闭
/*
 * 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));
}

抱歉!评论已关闭.