zoukankan      html  css  js  c++  java
  • 【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

    比如输入一个长度为9的数组{1,2。3。2,2。2。5,4。2}, 因为数组中数字2出现了5次,超过数组的长度的一半,因此输出2



    一种办法是先把数组排序。那么超过一半的元素一定是数组最中间的元素。


    另外一种办法比較抽象。设一个变量保存当前值。设一个次数,当前值与下一个值进行比較。假设相等,次数加一,假设不相等。次数减一。假设次数减到0了还是不相等,就把当前值替换掉。

    代码例如以下:



    #include <stdio.h>
    #include <assert.h>
    
    int find_half(int *arr, int len)
    {
    	int count = 0;
    	int cur = 0;
    	int i = 0;
    	assert(arr != NULL);
    	for (; i < len; ++i)
    	{
    		if (count == 0)
    		{
    			cur = arr[i];
    			count = 1;
    		}
    		else if (arr[i] == cur)
    			count++;
    		else
    			count--;
    	}
    	return cur;
    }
    
    int main()
    {
    	int arr[] = { 1, 2, 2, 2, 3, 2, 6, 2, 7, 2 };
    	int len = sizeof(arr) / sizeof(arr[0]);
    	printf("%d
    ", find_half(arr, len));
    	return 0;
    }
    







  • 相关阅读:
    Linux下新磁盘挂载
    Centos6.5下Haproxy负载均衡搭建
    Linux下redis搭建与配置
    iptables-nat实现反向代理功能
    iptables防火墙规则的添加、删除、保存
    [Python]-tools
    [Python]-Game
    .[Linux]-部署Nagios监控
    [HTML]-web前端
    [Linux]-部署Zabbix监控
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7095372.html
Copyright © 2011-2022 走看看