C语言编程 找出数列中只出现了一次的数字(其他所有数字都是成对出现)

仅限于此题,最好的解决方案是使用按位异或的计算方法来计算

使用的是按位异或计算时“相同的数字计算会得到0,0和任何数字按位异或计算得到的是任何数字”的特性。

源代码:

#include<stdio.h>
#include<stdlib.h>
int rearch(int array[],int length)
{
    int i,result=0;
    for (i = 0; i < length; i++)
    {
        result ^= array[i];//将所有数列中的数字按位异或
    }
    return result;
}
int main()
{
    int result;
    int array[13] = { 1,9,8,1,8,9,2,4,5,3,4,5,2 };
    result = rearch(array,13);
    printf("只出现了一次的元素是%d\n", result);
    system("pause");
    return 0;
}

原文地址:https://blog.51cto.com/14232799/2382172

时间: 2024-10-25 21:00:01

C语言编程 找出数列中只出现了一次的数字(其他所有数字都是成对出现)的相关文章

C语言编程 找出数列中只出现一次的两个数

原题:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次.找出这两个只出现一次的数字,编程实现. 此题要用到在数列中找出只出现一次的一个数字的方法参考https://blog.51cto.com/14232799/2382172 此题明显无法一次性将两个数都找出,所以需要将数列分为两部分,每一部分有一个只出现一次的数,那么此时需要的就是分离数列的条件. 沿用找出一个数时的思想,将数列进行相互异或,但这次所得的值不是只出现一次的那个数了,因为只出现一次的数有两个,所以此次计算得到的是只出现

40 - 找出数组中只出现一次的数字

题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.编写程序找出这个两个只出现一次的数字.要求时间复杂度O(n),空间复杂度O(1). 如 {2,4,3,6,3,2,5,5},输出{4,6} 解析: 空间复杂度为O(1)断绝了用hash-table的思路,时间复杂度O(n)断绝排序的思路. 如何判断一个数字出现2次呢? 计数 异或:如果出现2次,任意数字和自己异或都为0 异或的性质: 任何数字和 0 异或,都为它本身. 任意数字和自己异或都为0. 由于成对出现的元素异或结果为 0

LeetCode&mdash;&mdash;Single Number(找出数组中只出现一次的数)

问题: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?   分析: 数组中的数除了一个只出现了一次之外,其它都出现了两次, 要找出只出

LeetCode&mdash;&mdash;Single Number II(找出数组中只出现一次的数2)

问题: Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?   Single Number I 升级版,一个数组中其它数出现了

找出数组中只出现一次的数字

题目 : 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 解析 首先:位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身.异或运算满足交换律结合律. 当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了. 依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组.我们首先还是先异或,剩下的数字肯定是A.B异或的结果,这个结果的二进制中的1,表现的是A和B的不同的位.我们就取第

面试题:找出数组中只出现一次的数字(二)

难度:中等 一个整数数组,除了一个数之外所有数字都出现了3次,找出这个数字来. 注意: 你的算法应该是线性运行复杂度,且不能使用额外内存空间. 答案: public class Solution { public int singleNumber(int[] nums) { int ones = 0, twos = 0, threes = 0; for (int i = 0; i < nums.length; i++) { // twos holds the num that appears t

面试题:找出数组中只出现一次的数字

难度:中等 一个整数数组,除了一个数之外所有数字都出现了2次,找出这个数字来. 注意: 你的算法应该是线性运行复杂度,且不能使用额外内存空间. 答案: public class Solution { public int singleNumber(int[] nums) { int n =0; // as we know that bitwise XOR in Java // 0 ^ N = N // N ^ N = 0 for(int i=0; i!=nums.length; i++) { n

找出数组中只出现一次的数

这个题目有三种变形. 第一种,一个数组中所有数都出现了两次,只有一个数出现了一次,求这个数.这个题比较简单,只要知道数字间异或的特性,就可以很容易的得出答案. int find_num_appear_once(int *data, int length){ if(data==NULL || length==0)return; int i=0; int res=0; for(;i<length;i++){ res ^= data[i]; } return res; } 第二种,一个数组中所有的数都

找出字符串中出现次数最多的字符,出现了几次都表示出来

var a="AAAAAAAAWelcomeToQianfng";        var arr=new Array(52);        for(var i=0;i<arr.length;i++){                        arr[i]=0;        }                                             //console.log(arr);//"0,0,0,0,0,0,0,0,0,0,0,0,0,0