有一个整形数据,共有N的元素,如果其中有一个元素m的数量大于n/2,请找出这个元素。
方法1:
两层for循环得到数组中每个元素的数量,然后取出其中元素数量最多的那个元素;
方法2:
对数组进行排序,因为元素m的数量大于n/2,那么排序后中间那么元素的就是要找的元素;
方法3:
1.依次遍历数组,若接下来的数字与记录的数字相同,则次数加一;若接下来的数字与记录的数字不同,则次数减一。
2.当次数为0时,保存下一个数字,并将次数置为1。
当数组结束的时候得到的那个元素就是待寻找的元素。例如极端情况下数组中只有两个不同的元素m、n,其中值为m的元素数量大于n/2。(n n m m m )或者 (n m n m m ) 或者 (m n m n m)........
int nums[] = {3,3,2,4,3,3,2,3,4,3,5,3,6,3,3};
void fun()
{
int num = nums[0],times = 1;
for(i = 1;i < sizeof(nums)/sizeof(nums[0]); i++){
if(times == 0){
num = nums[i];
times = 1;
}
if(num == nums[i]){
times++;
}else{
times--;
}
}
printf("num:%d\n",num);
}