题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static int deal(int num) {
int i=1;
while(num%2==0) {
num=num/2;
i=i+1;
}
return i;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int[] a= {4,5,2,2,3,3};
int num=0;
for(int i=0;i<a.length;i++) {
num=a[i]^num;
}
int number=deal(num);
List<Integer> set=new ArrayList<>();
List<Integer> set1=new ArrayList<>();
for(int i=0;i<a.length;i++) {
String s= Integer.toBinaryString(a[i]);
if(s.charAt(s.length()-number)=='0')
{
set.add(a[i]);
}
else {
set1.add(a[i]);
}
}
int num1=0;
for(Integer n:set) {
num1=num1^n;
}
System.out.println(num1);
int num2=0;
for(Integer m:set1) {
num2=num2^m;
}
System.out.println(num2);
}
}
博客给出一个算法题目,即从非空整数数组中找出只出现一次的元素,其余元素均出现两次,要求算法有线性时间复杂度且不使用额外空间。还给出了 Java 代码实现该算法,通过异或运算等操作来找出目标元素。
1295

被折叠的 条评论
为什么被折叠?



