【leetcode】137. 只出现一次的数字 II

【leetcode】137. 只出现一次的数字 II

题目

【leetcode】137. 只出现一次的数字 II

python3语言

代码1:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        list1=nums.copy()
        for i in nums:
            list1.remove(i)
            if i not in list1:
                return i
            list1.append(i)

代码1,运行如下:
【leetcode】137. 只出现一次的数字 II
代码2:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:      
        return (3 * sum(set(nums)) - sum(nums)) // 2

代码2,运行如下:
【leetcode】137. 只出现一次的数字 II

C++语言

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ones = 0, twos = 0;
        for (int x: nums) {
            // 之前出现过两次的,这次再出现就是出现了三次
            int threes = twos & x;

            // 之前出现过两次,这次没出现,是出现了两次。
            // 之前出现过一次的,这次再出现,也是出现了两次。
            twos = (twos & ~x) | (ones & x);

            // 统计记录出现了奇数次的,并从其中清除出现三次的。
            // 这样ones里面始终只会记录出现了一次的。
            ones = ones ^ x;
            ones &= ~threes;
        }
        return ones;

    }
};

运行如下:
【leetcode】137. 只出现一次的数字 II

上一篇:试题 算法训练 2的次幂表示


下一篇:力扣137. 只出现一次的数字 II