- 1、题目描述:
-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 < data.size();i ++){
if(mp[data[i]] == 1){//如果data[i]出现过一次就加入到res里面
res.push_back(data[i]);
}
if(res.size() >= 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<>();//定义一个哈希表
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 >= 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 >= 2: break#因为题目说了,只有两个元素出现了1次,所以res的大小超过1个就可以不需要遍
return res
```

京公网安备 11010502036488号