• 137. Single Number II


    Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.

    Note:
    Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

     此题不是很好理解,首先,之前的single number是解决不了这个问题的,因为这个里面全是奇数次,而奇数次之后的结果就是都是它们本身,不过此题还是用位操作来做的,想法如下:

    首先,因为次数最多是3次,所以用两个位来做,假设a为第一个bit,b为第二个bit,我们就有:

    a = a^r&~b;

    b = b^r&~a;

    00+1=01;

    01+1=10;

    10+1=00;

    此题可以解决次数为奇数次的情况,代码如下:

     1 public class Solution {
     2     public int singleNumber(int[] nums) {
     3         int a=0;
     4         int b=0;
     5         for(int i=0;i<nums.length;i++){
     6             a = a^nums[i]&(~b);
     7             b = b^nums[i]&(~a);
     8         }
     9         return a;
    10         
    11     }
    12 }

    这个解法对于解决五次的问题还是不是很好理解的,先上代码:

    1 int singleNumber(int A[], int n) {
    2     int twos = 0xffffffff, threes = 0xffffffff, ones = 0;
    3     for(int i = 0; i < n; i++){
    4         threes = threes ^ (A[i] & twos);
    5         twos = (twos ^ A[i]) & ~ones;
    6         ones = ones ^ (A[i] & ~twos & ~threes);
    7     }
    8     return ones;
    9 }
    看了别人的做法,发现了可以用求余的做法来做,代码如下:
     1 public class Solution {
     2     public int singleNumber(int[] nums) {
     3         int ans = 0;
     4         for(int i=0;i<32;i++){
     5             int sum = 0;
     6             for(int j=0;j<nums.length;j++){
     7                 if(((nums[j]>>i)&1)==1){
     8                     sum++;
     9                     sum%=3;
    10                 }
    11             }
    12             if(sum>0){
    13                 ans = ans|(sum<<i);
    14             }
    15         }
    16         return ans;
    17     }
    18 }
     
  • 相关阅读:
    构造函数创建对象和Object.create()实现继承
    DIV伸缩盒子box
    阿里巴巴面试题
    在字符串上添加一些方法,让字符串具有新添加方法的功能
    JQuery常用函数及功能小结--转载
    滚动公告,永远只显示一条
    JS自定义属性兼容
    手机端touchstart,touchmove,touchend事件,优化用户划入某个可以点击LI的效果
    图片预加载问题
    多联动导航
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6378366.html
Copyright © 2020-2023  润新知