zoukankan      html  css  js  c++  java
  • 一个数组中有偶数个数相同,需要找出不同的那个数,要求复杂度为O(n)

    先介绍java中的一种运算,叫 “异或”,符号为 ‘ ^ ’ ,其主要是对两个操作数进行位的异或运算(操作时候自动转换成二进制数),位相同的取0,相反取1。若两操作数相同时,互相抵消。

    例:
    1010(10),1110(14),1010(10)

    操作 :1010 ^ 1110 = 0100

        0100 ^ 1010 = 1110 => 14

      找出不同的数 14 (看作是一种相互抵消)

    见问题:

      一个数组中有偶数个数相同(或者是两两成对,有且仅有一个是单独的数),需要找出不同的那个数,要求复杂度为O(n)

      (如果复杂度不为n的话,解决的方式就有很多了)

    见代码:

    public class Solution {
        public static int singleNumber(int[] arr) {
            int result = 0;
            int len=arr.length;
            for (int i = 0; i < len; i++)
            {
                result = result ^ arr[i];
            }
            return result;
        }
    
        public static void main(String[] args) {
            int[] nums ={9,8,7,6,9,4,55,55,8,7,6};
            int key= singleNumber(nums);
            System.out.println("不同的数为:"+key);
        }
    }

    结果为:

  • 相关阅读:
    1040 最大公约数之和(欧拉函数)
    1028 大数乘法 V2(FFT or py)
    1020 逆序排列(DP)
    1837 砝码称重
    1070 Bash游戏 V4
    1280 前缀后缀集合(map)
    1390 游戏得分(贪心)
    1179 最大的最大公约数
    1400 序列分解(dfs)
    1420 数袋鼠好有趣(贪心二分)
  • 原文地址:https://www.cnblogs.com/Mark-blog/p/12896906.html
Copyright © 2011-2022 走看看