题目地址: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]; } };