剑指 Offer 56 - I. 数组中数字出现的次数
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]
示例 2:
输入:nums = [1,2,10,4,1,4,3,3]
输出:[2,10] 或 [10,2]
限制:
2 <= nums.length <= 10000
解答思路:
- 暴力解法,重新开辟一个数组记录原数组中每个数字的出现频率
- 再遍历这个频率数组,找到那两个频率为2的数字
- 再用一个长度为2的数组存放那两个重复数字
class Solution {
public int[] singleNumbers(int[] nums) {
int []numCount=new int[100000];//创建一个10^5大小的数组,这有点暴力解的意思,没有考虑到数字的上限大小
int []arr=new int[2];//此数组用于记录那两个出现一次的数字
for(int i = 0; i < nums.length; i++){
numCount[nums[i]]++;//统计原数组中数字的出现频率
}
int k=0;
for(int i = 0; i < nums.length; i++){
if(numCount[nums[i]] != 2){//再次遍历,找到原数组中出现次数为1次的数字即可
arr[k++]= nums[i];//将出现次数为1次的数字放到arr数组中
}
}
return arr;
}
}