0
点赞
收藏
分享

微信扫一扫

LeetCode 137.只出现一次的数字 II

小沙坨 2022-02-12 阅读 24
//暴力破解
class Solution
{
public:
    int singleNumber(vector<int> &nums)
    {
        int len = nums.size(), result;
        for (int i = 0; i < len; i++)
        {
            for (int j = 0; j < len; j++)
            {
                //依次让每个数与数组的各个数进行比较
                if (nums[i] == nums[j] && (i != j))
                {
                    //出现相等则直接进行下一个数与数组的各个数的比较
                    break;
                }
                //直到最后一个数与数组的其他数都不相等
                if (j == len - 1)
                {
                    //比较的这个数就是只出现一次的数字
                    result = nums[i];
                }
            }
        }
        return result;
    }
};

//哈希映射
class Solution
{
public:
    int singleNumber(vector<int> &nums)
    {
        int result = 0;
        unordered_map<int, int> us;
        //遍历数组,获取每一个元素的value值
        for (auto num : nums)
        {
            ++us[num];
        }
        //遍历哈希集合映射
        for (auto [num, count] : us)
        {
            //找到只出现一次的元素
            if (count == 1)
            {
                result = num;
                break;
            }
        }
        return result;
    }
};
//先排序后遍历查找
class Solution
{
public:
    int singleNumber(vector<int> &nums)
    {
        //获取数组的长度
        int len = nums.size();
        //对数组进行排序
        sort(nums.begin(), nums.end());
        //遍历数组:如果相邻两个元素相等,则向前三位
        for (int i = 0; i < len; i += 3)
        {
            //当遍历到最后一个元素或者出现相邻的元素不相等
            if (i == len - 1 || nums[i] != nums[i + 1])
            {
                //即找到只出现一次的数字
                return nums[i];
            }
        }
        //不存在唯一的数字则返回0
        return 0;
    }
};
举报

相关推荐

0 条评论