首页 > 代码库 > Chap5: question: 29 - 31
Chap5: question: 29 - 31
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 = http://www.mamicode.com/data[0];"color: blue;">for(int i = 1; i < length; ++i) { if(count == 0){ value = http://www.mamicode.com/data[i];"color: blue;">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 = http://www.mamicode.com/getNumber(numbers, sizeof(numbers) / 4); if(value && !Invalid_Input) printf("%d\n", value); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。