力扣------找出数组中元素个数大于数组长度1/2的那个元素

有一个整形数据,共有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);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值