- 1、题目描述:
图片说明

- 2、题目链接:
https://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=117&&tqId=34997&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

-3、 设计思想:
图片说明
详细操作流程看下图:
图片说明

-4、视频讲解链接B站视频讲解

-5、代码:
c++版本:

 class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        map<int,int>mp; //定义一个哈希表
        for(int i = 0;i < data.size();i ++){
            mp[data[i]]++; //把data里面元素出现的次数进行统计
        }
        vector<int>res; //定义res方便给*num1,*num2赋值
        for(int i = 0;i &lt; data.size();i ++){
            if(mp[data[i]] == 1){//如果data[i]出现过一次就加入到res里面
                res.push_back(data[i]);
            }
            if(res.size() &gt;= 2) break; //因为题目说了,只有两个元素出现了1次,所以res的大小超过1个就可以不需要遍历data数组了
        }
        *num1 =res[0];
        *num2 = res[1];


    }
};

Java版本:

//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
import java.util.*;
public class Solution {
    public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) {
         HashMap<integer,integer> mp = new HashMap&lt;&gt;();//定义一个哈希表
         for(int num:array){//把data里面元素出现的次数进行统计
             if(!mp.containsKey(num)){
                 mp.put(num,1);//如果map里面没有存在那么就先加入
             }else{
                mp.put(num,mp.get(num)+1); //如果map里面存在那么就进行键值的更新
             }

         }
         int cnt = 0;
         int res[] = new int[2];//定义res方便给*num1,*num2赋值
         for(int num:array){
             if(mp.get(num)== 1){//如果data[i]出现过一次就加入到res里面
                 res[cnt] = num; 
                 cnt ++;
             }
             if(cnt &gt;= 2) break;//因为题目说了,只有两个元素出现了1次,所以res的大小超过1个就可以不需要遍
         }
         num1[0] = res[0];
         num2[0] = res[1];

    }
}

Python版本:

# -*- coding:utf-8 -*-
class Solution:
    # 返回[a,b] 其中ab是出现一次的两个数字
    def FindNumsAppearOnce(self, array):
        # write code here
        map = {}#定义一个哈希表
        for num  in array:#把data里面元素出现的次数进行统计
            if num in map:
                map[num] += 1
            else:
                map[num] = 1
        res = []
        cnt = 0
        for num in array:#如果data[i]出现过一次就加入到res里面
            if map[num] == 1:
                res.append(num)
                cnt += 1
            if cnt &gt;= 2: break#因为题目说了,只有两个元素出现了1次,所以res的大小超过1个就可以不需要遍

        return res

```