zoukankan      html  css  js  c++  java
  • 查找重复的数

          在前几天写了一个查找缺失的数的算法(http://blog.csdn.net/dlutbrucezhang/article/details/11467693),今天写一个类似的算法,查找一个重复的数。

           描述:一个数组中存放连续的数字,但是其中多出一个数字,是一个重复出现的数字,当然,它可以出现在任何位置。

           解决方法:

          1.总和相减法

           由于多出一个数,所以加在一块之后再减去原来的总和就可以得到重复的那个数字。

          2.异或法

          这是把所有连续的数在一块异或,最终也是得到重复的数(描述的不清楚,还是看代码吧)

    #include <stdio.h>
    
    int main()
    {
    	int test_array[] = {1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11};
    	int array_sum = 0, real_sum;
    	int i;
    	int array_length;
    	int xor = 0;
    
    	/*获取数组的长度*/
    	array_length = sizeof(test_array) / sizeof(int);   /*这里的长度是12*/
    
    	/*总和相减法*/
    	for(i = 0; i < array_length; i++)
    	{
    		array_sum += test_array[i];
    	}
    	real_sum = (1 + array_length - 1) * (array_length - 1) / 2;
    	printf("重复的那个数字是:%d
    ", array_sum - real_sum);
    
    	/*整体异或法*/
    	for(i = 1; i < array_length; i++)
    	{
    		xor ^= i;
    	}
    
    	for(i = 0; i < array_length; i++)
    	{
    		xor ^= test_array[i];
    	}
    	printf("重复的那个数字是:%d
    ", xor);
    	
    }
  • 相关阅读:
    Homebrew 更改国内阿里源
    Java数组以及内存分配
    Django-Scrapy生成后端json接口
    MySQL必知必会(1-12章)
    招聘网站爬虫模板
    ubuntu之jupyter notebook配置
    服务器基本配置(ubuntu)
    Typora+PicGo+码云Gitee搭建本地博客环境
    redis缓存雪崩,穿透,击穿。整理篇
    鼠标修复升级记录(下)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3320053.html
Copyright © 2011-2022 走看看