Chap5: question: 29 - 31

时间:2014-05-02 10:46:15   收藏:0   阅读:340

29. 数组中出现次数超过一半的数字.

方法a. 排序取中       O(nlogn).

方法b. partition 函数分割找中位数          >=O(n).

方法c. 设计数变量,扫描一遍。     O(n).

#include <stdio.h>
bool Invalid_Input = false;
int getNumber(int data[], int length){
    Invalid_Input = false;
    if(!data || length < 1) { Invalid_Input = true; return 0; }
    int count = 1, value = data[0];
    for(int i = 1; i < length; ++i)
    {
        if(count == 0){
            value = data[i];
            count = 0;
        }else if(data[i] == value){
            ++count;
        }else
            --count;
    }
    return value;
}
int main(){
    int numbers[] = {2, 2, 2, 2, 6, 6, 6, 6, 6};
    int value = getNumber(numbers, sizeof(numbers) / 4);
    if(value && !Invalid_Input)
        printf("%d\n", value);
    return 0;
}
bubuko.com,布布扣

Chap5: question: 29 - 31,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!