LeetCode 剑指 Offer 56 - I. 数组中数字出现的次数(java实现)

剑指 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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值