• 找到数组出现次数唯一的数


    1.  数组中唯一出现过一次的数

       利用异或的特性:x ^ y ^ x = y ^ x ^ x = y。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int len=15;
    int a[7]={2,4,3,3,2,5,5};
    int main()
    {
        int ans=a[0];
        for(int i=1;i<7;i++)
        {
            ans^=a[i];
        }
        printf("%d
    ",ans);
        return 0;
    }

    2.  一个数组里除了一个数字之外,其他数字出现了n次

       我们把这个数分解成二进制,计算出每一位出现1的个数,我们知道如果多次出现的话,1的个数是能够整除这个n,如果发现这个n 不能够被 整除的时候,我们就知道那个唯一的数字转换为二进制的时候在这一位上会分解到,我们把这个再转换为十进制的数即可。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int len=15;
    int a[7]={2,3,3,3,4,4,4};
    int b[32];
    int main()
    {
        for(int i=0;i<=6;i++)
        {
            for(int j=0;j<32;j++)
            {
                b[j]+=((a[i]>>j)&1);
            }
        }
        int ans=0;
        for(int i=0;i<32;i++)
        {
            if(b[i]%3!=0)
            {
                ans+=(1<<i);
            }
        }
        printf("%d
    ",ans);
        return 0;
    }

    2.  找出数组唯一出现过两次的数组,但这是用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。

       这个来说主要用到的是数学知识,1001个数,有一个出现了两次,那么我把这1001个数加起来,用和减去1到1000的和,很明显,差就是出现了两次的那个数了。

    int findd(int a[])
    {
        int sum1=0,sum2=0;
        for(int i=0;i<=1000;i++)
            sum1+=a[i];
        for(int j=1;j<=1000;j++)
            sum2+=j;
        return sum1-sum2;
    }

    3.  找出数组唯一出现过两次的数组,但是数值任意。

       这个感觉只能用Hash 去做了。

    int findd(int a[])
    {
        int hashh[1001]={0};
        int x=0;
        for(int i=0;i<1001;i++)
        {
            if((++hashh[a[i]])==2)
            {
                x=a[i];
                break;
            }
        }
        return x;
    }
  • 相关阅读:
    点击有惊喜
    模态框案例
    DOM操作
    定时器
    函数和object
    shell 判断文件出现次数
    shell 判断路径
    shell 循环数组
    shell 判断为空打印
    shell 示例1 从1叠加到100
  • 原文地址:https://www.cnblogs.com/jkzr/p/10594114.html
Copyright © 2020-2023  润新知