- 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
};
京公网安备 11010502036488号