Leetcode Single Number II

xiaoxiao2021-02-28  102

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?

看到题目第一个反应就是利用hash表来解决该问题,但需要耗费O(N)的内存空间以及遍历两次,不符合要求。然后就想着像之前的题目一样如何组合运算符和数字来实现,从整个数来说是不行,但可以从每个位来进行判断。某个位的所有1的个数余3就等于所求数在该位的数值。

代码如下:

class Solution { public: int singleNumber(vector<int>& nums) { int sum = 0; int result = 0; for(int i=0;i<32;i++) { int mask = 1<<i; sum = 0; for(int j=0;j<nums.size();j++) { if((nums[j]&mask)!=0) { sum++; sum = sum%3; } } if(sum != 0) result |= mask; } return result; } };

转载请注明原文地址: https://www.6miu.com/read-25308.html

最新回复(0)