- 1、题目描述:
-3、 设计思想:
详细操作流程看下图:
-4、视频讲解链接B站视频讲解
-5、代码:
c++版本:
class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { int n = data.size();//求出数组的长度 int eor = 0; //用来保存那两个只出现1次的数的异或值 for(int i = 0; i < n; i ++) { eor ^= data[i];//将整个数组异或 } /// eor = a ^ b /// eor != 0 /// eor必然有一个位置上是1 int rightOne = eor & (~eor + 1); // 提取出最右的1 int onlyOne = 0;//用来保存只出现1次的数的其中的那一个 for(int i = 0; i < n; i ++) { if((data[i] & rightOne) != 0) { onlyOne ^= data[i];//寻找那个数 } } *num1 = onlyOne; *num2 = (eor ^ onlyOne); } };
Java版本:
//num1,num2分别为长度为1的数组。传出参数 //将num1[0],num2[0]设置为返回结果 public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]) { int n = array.length;//求出数组的长度 int eor = 0;//用来保存那两个只出现1次的数的异或值 for(int i = 0; i < n; i ++) { eor ^= array[i];//将整个数组异或 } /// eor = a ^ b /// eor != 0 /// eor必然有一个位置上是1 int rightOne = eor & (~eor + 1); /// 提取出最右的1 int onlyOne = 0;//用来保存只出现1次的数的其中的那一个 for(int i = 0; i < n; i ++) { if((array[i] & rightOne) != 0) { onlyOne ^= array[i];//寻找那个数 } } num1[0] = onlyOne; num2[0] = (eor ^ onlyOne); } }
Python版本:
# -*- coding:utf-8 -*- class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): # write code here n = len(array)#求出数组的长度 eor = 0#用来保存那两个只出现1次的数的异或值 for i in range(n):#将整个数组异或 eor ^= array[i] rightOne = eor & (~eor + 1)#提取出最右的1 onlyOne = 0#用来保存只出现1次的数的其中的那一个 for i in range(n): if ((array[i] & rightOne) != 0): onlyOne ^= array[i] #寻找那个数 res = [] res.append(onlyOne) res.append((eor ^ onlyOne)) return res
JavaScript版本:
function FindNumsAppearOnce(array) { // write code here // return list, 比如[a,b],其中ab是出现一次的两个数字 let res = []; let n = array.length;//求出数组的长度 let eor = 0;//用来保存那两个只出现1次的数的异或值 for(let i = 0; i < n; i ++) { eor ^= array[i];//将整个数组异或 } /// eor = a ^ b /// eor != 0 /// eor必然有一个位置上是1 let rightOne = eor & (~eor + 1); /// 提取出最右的1 let onlyOne = 0;//用来保存只出现1次的数的其中的那一个 for(let i = 0; i < n; i ++) { if((array[i] & rightOne) != 0) { onlyOne ^= array[i];//寻找那个数 } } res.push(onlyOne); res.push(eor ^ onlyOne); return res; } module.exports = { FindNumsAppearOnce : FindNumsAppearOnce };