- 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
```