【leetcode78】Single Number II

来源:互联网 发布:婚礼堵门游戏 知乎 编辑:程序博客网 时间:2024/06/05 05:50

题目描述:

给定一个数组,里面除了一个数字,其他的都出现三次。求出这个数字

原文描述:

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

Note:

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

Subscribe to see which companies asked this question

思路:

  • 设置一个32位的数组,然然后对数组,Array【i】代表i位的1个数,统计整个数组nums【】的数字,对于每个Array【i】做mod3的运算
  • 遍历nums【】数组时候,是左移&1取出,加到Array【i】上面,然后mod3
  • 最后右移加到result上面

代码:

// Single Number II// 方法1,时间复杂度O(n),空间复杂度O(1)public class Solution {    public int singleNumber(int[] nums) {        final int W = Integer.SIZE; // 一个整数的bit数,即整数字长        int[] count = new int[W];  // count[i]表示在在i位出现的1的次数        for (int i = 0; i < nums.length; i++) {            for (int j = 0; j < W; j++) {                count[j] += (nums[i] >>> j) & 1;                count[j] %= 3;            }        }        int result = 0;        for (int i = 0; i < W; i++) {            result += (count[i] << i);        }        return result;    }};

更多的leetcode的经典算法,查看我的leetcode专栏,链接如下:

leetcode专栏

我的微信二维码如下,欢迎交流讨论

这里写图片描述

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

这里写图片描述

1 1