首页 > 其他分享 >已知一个数组中有俩个数出现了奇数次,其余数出现偶数次,找出出现奇数次的俩个数

已知一个数组中有俩个数出现了奇数次,其余数出现偶数次,找出出现奇数次的俩个数

时间:2023-05-09 22:55:05浏览次数:44  
标签:int result2 个数 result1 数次 出现 数是

/**
 * @Auther: 么么
 * @Date: 2023/5/9 - 05 - 09 - 22:12
 * @Description: PACKAGE_NAME
 * @version: 1.0
 */

//已知一个数组中有俩个数出现了奇数次,其余数出现偶数次,找出出现奇数次的俩个数


public class test03 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        int[] arr = {1, 5, 1, 14, 3, 3, 3, 3};
        //设其中一个数为 result1
        int result1 = 0;

        for (int n : arr) {
            result1 ^= n;
        }
        /**
         *  执行完for循环 result1= 5^14  result1 !=0
         *  5 --> 1001
         *  14 --> 1110
         *   1001
         *  ^1110
         *  ------
         *   0111
         *
         *  因为result1不等于0 ,所以转为二进制,必有一位是为 1
         *  所以要找的俩个数的二进制中 必有一位 一个数是1 一个数是0
         *  假设是第2位 一个数是1 一个数是0
         *  将数组中第2位上 是1 的做异或运算  得到其中一个数
         */
        //获得 rusult1 二进制位最右侧的1
        //result1 --->0111
        //~result1 取反  1000
        //~result1+1   1001
        //result1 & (~result1+1)
        //0111 & 1001   ->0001
        int right = result1 & (~result1 + 1);

        int result2 = 0;
        for (int n : arr) {
            //判断数组中最右侧位为1的数
            if ((right & n) == 1) {
                //让最右侧位为1的数作异或运算
                result2 ^= n;
            }
        }

        //找到了result2设为b  而result1 = a^b
        // 所以 result1 = a^b ^b =a   就得到了俩个数
        result1 = result1 ^ result2;

        System.out.println("一个数为:"+result1);
        System.out.println("另一个数为:"+result2);


    }


}

 

标签:int,result2,个数,result1,数次,出现,数是
From: https://www.cnblogs.com/me-me/p/17386609.html

相关文章

  • keepalived自带版本比较高,出现启动后主备都绑定了vip的情况
    解决办法单播模式些特定环境下不允许发送组播,造成备服务器无法收到p包,就比如某些云服务器吧,默认会禁止组播。可以通过单播的方式解决.单播示例配置:注意此语法在keepalived1.2.11版本以上支持unicastsrcip192.168.1.21###(本地IP地址)unicastpeer{192.168.1.22##(......
  • js方法判断两个数组的交集、并集和超集
    下面是JS实现数组交集、并集和超集的方法:1.交集:即两个数组中相同的元素。可以通过遍历一个数组,判断另一个数组是否包含该元素来确定。functionintersection(arr1,arr2){constresult=[];for(leti=0;i<arr1.length;i++){if(arr2.includes(arr1[i])){......
  • 微信小程序 自定义组件 监听数据变化 出现异常 Maximum call stack size exceeded.
    代码调用处: 组件内部  本地调试无异常,发布之后出现此异常解决方法:监听属性steps的值变化时,调用处不能使用双向绑定,去掉steps的双向绑定即可,具体的原因未知(不知为啥本地调试不会抛异常) ......
  • tableview里面数据cell的个数居然不能改了(section footer )
    tableview里面数据cell的个数居然不能改了-----------数据源,代理等也设置好了。。。但是就是该表不了,心情有点焦躁啊。后来发现我xib的tableview里面多了一个sectionfooter像标尺一样的可以伸缩的,原来是它挡着了。O(∩_∩)O~,对tableview还是不是很熟悉呀。......
  • 数组中唯一只出现一次的数字
    思路如果一个数字出现3次,那么它的二进制表示的每一位也出现三次,如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除cnt[32]数组存储每一位1出现的次数遍历数组中所有数,将其二进制表示记录在cnt数组里遍历cnt数组,根据cnt[i]能......
  • leetcode-349. 两个数组的交集
    returnnums1.Intersect(nums2);题意:给定两个数组,编写一个函数来计算它们的交集。c#可以用linq自带的方法返回,顺便看了下微软的内部实现:privatestaticIEnumerable<TSource>IntersectIterator<TSource>(IEnumerable<TSource>first,IEnumerable<TSource>second,IEquali......
  • 解决 VirutalBox 安装 Alpine Linux 出现 Kernel Panic 的问题
    问题如图,使用默认配置安装AlpineLinux时总是会启动都启动不了,找了半天后终于在官方论坛上找到原因了。解决在设置里分配大于1个的cpu就行,如图我这里给的是2个,分配完毕后重新启动就正常了......
  • Node16+版本出现node-sass兼容性问题
    最近多次遇到这个问题,node16+版本安装或者初始化带有node-sass和sass-loader包的项目报错。翻遍了所有相关文章,总结出以下两种解决办法:方法一:卸载旧版本的node-sass和sass-loader,安装sass和sass-loader,不再使用node-sassnpmuninstallsass-loadernode-sassnpminstallsass-l......
  • 快速幂:剑指 Offer 16. 数值的整数次方
    题目描述:实现 pow(x, n) ,即计算x的n次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。  解题思路:   classSolution{publicdoublemyPow(doublex,intn){if(x==0.0)return0;longb=n;doubleres=1;......
  • 2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并
    2023-05-08:我们定义了一个函数countUniqueChars(s)来统计字符串s中的唯一字符,并返回唯一字符的个数。例如:s="LEETCODE",则其中"L","T","C","O","D"都是唯一字符,因为它们只出现一次,所以countUniqueChars(s)=5。本题将会给你一个字符串s,我们需要返回countUnique......