【LeetCode】Single Number II (3 solutions)

Single Number II

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

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

解法一:开辟map记录次数

class Solution {
public:
    int singleNumber(int A[], int n) {
        map<int, int> m;
        for(int i = 0; i < n; i ++)
        {
            map<int, int>::iterator it = m.find(A[i]);
            if(it == m.end())
                m[A[i]] = 1;
            else
                m[A[i]] ++;
        }
        for(map<int, int>::iterator it = m.begin(); it != m.end(); it ++)
        {
            if(it->second != 3)
                return it->first;
        }
    }
};

解法二:先排序,再遍历找出孤异元素

class Solution
{
public:
    int singleNumber(int A[], int n)
    {
        sort(A, A+n);
        //note that at least 4 elements in A
        if(A[0] != A[1])
            return A[0];
        if(A[n-1] != A[n-2])
            return A[n-1];
        for(int i = 1; i < n-1; i ++)
        {
            if(A[i] != A[i-1] && A[i] != A[i+1])
                return A[i];
        }
    }
};

解法三:位操作。不管非孤异元素重复多少次,这是通用做法。

对于右数第i位,如果孤异元素该位为0,则该位为1的元素总数为3的整数倍。

如果孤异元素该位为1,则该位为1的元素总数不为3的整数倍(也就是余1)。

换句话说,如果第i位为1的元素总数不为3的整数倍,则孤异数的第i位为1,否则为0.

(如果非孤异元素重复n次,则判断是否为n的整数倍)

class Solution {
public:
    int singleNumber(int A[], int n) {
        int count;
        int ind = 1;    //mask position
        int result = 0;
        while(ind)
        {
            count = 0;
            for(int i = 0; i < n; i ++)
            {
                if(A[i] & ind)
                    count ++;
            }
            if(count % 3)
                result |= ind;  //position ind is 1
            ind <<= 1;
        }
        return result;
    }
};

时间: 2024-09-29 15:41:52

【LeetCode】Single Number II (3 solutions)的相关文章

【LeetCode】Single Number II

题意: 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? 思路: 用 ones, twos, threes 分别记录数字在二

【LeetCode】Single Number (2 solutions)

Single Number Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 解法一:用map记录每个元素的次数,返回次数为1的元素 cl

【LeetCode】Single Number

原文: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 解答: 常规解法:先对数组进行排序,然后通过按顺序判断每相邻两个数是否相同即可

【LeetCode】Single Number I &amp; II

Single Number I : Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? Solution: 解法不少,贴一种: 1 cla

【leetcode78】Single Number II

题目描述: 给定一个数组,里面除了一个数字,其他的都出现三次.求出这个数字 原文描述: 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 m

【Leetcode】Ugly Number II

题目链接:https://leetcode.com/problems/ugly-number-ii/ 题目: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first

【LeetCode】Combination Sum II (2 solutions)

Combination Sum II Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. Each number in C may only be used once in the combination. Note: All numbers (including t

【leetcode】Single Number (Medium) ☆

题目: Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 要求O(n)算法,还不能有辅助空间.开始用了各种O(n^2)的方法,都超时,后来

【Leetcode长征系列】Single Number II

原题: 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? 思路: 用一个32位的数组存每一位bit值之后.得到答案后每一位除