面试题56

题目地址:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/

题目描述

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

题目示例

示例 1:

输入:nums = [3,4,3,3]
输出:4

示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1

解题思路

哈希表:使用哈希表将nums数组中的每个元素出现的次数计数,然后统计出现次数为1的元素,直接返回即可。

排序+数学:分析题目可知,首先对数组nums排序,如果连续出现三个元素,则这三个元素必然相等并且排序在一起,接下来,遍历数组,我们让第一个元素和第三个元素对比,如果两者相同,则说明当下元素出现连续三次,数组下标自增3,否则,如果比较的第一个元素和第三个元素不相等,则此时的元素只出现了一次,即为所求元素。

程序源码

哈希表

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        unordered_map<int, int> mp;
        for(int i = 0; i < nums.size(); i++)
        {
            mp[nums[i]]++;
        }
        for(int j = 0; j < nums.size(); j++)
        {
            if(mp[nums[j]] == 1) return nums[j];
        }
        return 0;
    }
};

排序+数学

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        sort(nums.begin(), nums.end());
        for(int i = 0; i < nums.size() - 3; i += 3)
        {
            if(nums[i] != nums[i + 2])
            return nums[i];
        }
        return nums[nums.size() - 1];
    }
};
----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
原文地址:https://www.cnblogs.com/wzw0625/p/12650824.html