找出只出现一次的数字(JAVA)
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例: 输入:【1,2,1,3,2】 输出:3
1、利用集合或者哈希表来找出值。时间复杂度O(n),空间复杂度O(n)
public class HelloWorld {
public static void main(String[] args) {
int nums[] = {2,2,1,4,4};
int single = singleNumber(nums);
System.out.println(single);
}
public static int singleNumber(int[] nums){
HashSet<Integer> set = new HashSet<Integer>();
for(int num: nums){
if(!set.contains(num)){
set.add(num);
}else{
set.remove(num);
}
}
Iterator it = set.iterator();
int sigle = 0;
while (it.hasNext()){
sigle = (int)it.next();
}
return sigle;
}
}
2、利用异或来进行计算
public class HelloWorld {
public static void main(String[] args) {
int nums[] = {2,2,1,4,4};
int single = singleNumber(nums);
System.out.println(single);
}
public static int singleNumber(int[] nums){
int sigle = 0;
for(int num: nums){
sigle^=num; //进行异或运算
}
return sigle;
}
}
博客围绕在Java中找出非空整数数组里只出现一次的数字展开。题目要求算法有线性时间复杂度,且尽量不使用额外空间。给出了两种方法,一是利用集合或哈希表,二是利用异或计算,并给出了示例输入输出。
3835

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



