• Single Number && Single NumberII


    这两个题,都是用bit operation解决的,但是第二个稍微tricky一点。

    先说第一个,我们利用XOR, 如果一个数字出现两次,那么在每一位上,两两抵消。唯独那个只出现一次的,没有另一半和它抵消了。。所以就剩下了。

     1     public int singleNumber(int[] A) {
     2         if (A == null) {
     3             return 0;
     4         }
     5         int ret = 0;
     6         for (int i = 0; i < A.length; i++) {
     7             ret = ret ^ A[i];
     8         }
     9         return ret;
    10     }

    Single NumberII 

    这时再使用一的方法,就不好用了。怎么才能过滤掉出现三次的情况呢? 我们对这些数字的每一位出现的次数计数。如果出现三次,则归零。实现起来就是,该位一的个数就是:count % 3.

     1 public int singleNumber(int[] A) {
     2         if (A == null || A.length == 0) {
     3             return 0;
     4         }
     5         int res = 0;
     6         for (int i = 0; i < 32; i++) {
     7             int sum = 0;
     8             for (int j = 0; j < A.length; j++) {
     9                 if (((A[j] >>> i) & 1) == 1) {
    10                     sum++;
    11                     sum = sum % 3;
    12                 }
    13             }
    14             res |= sum << i;
    15         }
    16         return res;
    17     }
  • 相关阅读:
    JS4
    JS3
    JS2
    JS1
    Dos命令
    面向对象的复习
    9.14Css
    9.13列表的用法
    9.12Css
    9.11Css
  • 原文地址:https://www.cnblogs.com/gonuts/p/4413444.html
Copyright © 2020-2023  润新知