zoukankan      html  css  js  c++  java
  • LeetCode.260.只出现一次的数III(灵活应用位运算)

    原题链接

    思路:数组中仅有两个元素出现一次,其余元素均出现两次,也就是说所有元素异或的结果就等于这两个元素异或的结果,异或某一位结果为1说明在这一位这两个数字的位不同(一个为1,另一个为0),因此我们可以选择该不同的位作为划分,以这两个数字的不同位为基准,将数组中该位为1的划分到其中一个组中,为零的划分到另一个组中,然后异或两个组得到最终答案,这样就保证了两个不同的数字在两个组中,其余相同的数字也在相同的组中。

    参考代码

     1 public int[] singleNumber(int[] nums) {
     2         int modNum = 0;
     3         int ans[] = new int[2];
     4         for(int num : nums) {
     5             modNum ^= num;
     6         }
     7         int h = modNum & (-modNum); 
     8         for(int num : nums) {
     9             if((num & h) == 0) {
    10                 ans[0] ^= num;
    11             } else {
    12                 ans[1] ^= num;
    13             }
    14         }
    15         return ans;
    16     }
    View Code
  • 相关阅读:
    winform 与 html 交互 简单案例
    Winform窗口弹出位置控制
    c#预处理指令
    最简单的数据绑定
    Asp.Net细节性问题精萃
    AjaxUploader使用
    Log4net对文件的支持
    Log4net对数据库的支持
    Log4net使用
    Log4net介绍
  • 原文地址:https://www.cnblogs.com/bianjunting/p/14284481.html
Copyright © 2011-2022 走看看