剑指Offer-37——数组中只出现一次的数

题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

思路解析

直接用一个hashmap来存储值和出现次数,然后再次遍历即可得到结果。注意的是,这里需要将结果分别存入num1,num2两个数组里面。因此需要设置一个量来进行区分它们,让顺序执行的代码在一个循环体内分两次装入。

代码

import java.util.HashMap;
//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public class Solution {
    
    
    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
    
    
        //先将其排序
        if(array==null||array.length==0) return;
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<array.length;i++){
    
    
            if(map.containsKey(array[i]))
                map.put(array[i],2);
            else
                map.put(array[i],1);
        }
        int flag = 0;//用于将num1和num2的添加数的操作分开
        for(int i = 0;i<array.length;i++){
    
    
            if(map.get(array[i])==1){
    
    
                if(flag==0){
    
    
                    num1[0] = array[i];
                    flag++;
                }
                else{
    
    
                    num2[0] = array[i];
                 }
              }
        }
    }
}

这里为什么不用再if后面进行i++使得直接跳过那个已经存入num1的数呢?因为要是i是最后一个元素,在这里i++就出现了越界。

猜你喜欢

转载自blog.csdn.net/H1517043456/article/details/107435442
今日推荐