LeetCode--只出现一次的数字(位运算、Set集合)
【摘要】
题目分析
原题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来...
题目分析
原题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [3,3,2]
输出: 2
示例 2:
输入: [5,3,1,3,1]
输出: 5
解题思路
- 数据结构与算法:
数组、位运算、Set特性
- 实现思路1:利用^异或位运算特性 a ^ 0 = a; a ^ a = 0; a ^ b ^ a = a ^ a ^ b;
- 实现思路2:利用Set元素不能重复的特性;
代码实现
具体代码:
/**
* 只出现一次的数字(位运算、Set集合)
**/
public class SingleNumber {
public static void main(String[] args) {
int[] nums = {3,3,2};
//int[] nums = {5,3,1,3,1};
System.out.println(singleNumer(nums));
}
public static int singleNumer(int[] nums){
//思路1:位运算
int result = 0;
for (int i=0;i<nums.length;i++){
result ^= nums[i];
}
return result;
//思路2:Set特性
// Set<Integer> set = new HashSet<>();
// for (int i = 0; i < nums.length; i++) {
// if(!set.add(nums[i])){
// set.remove(nums[i]);
// }
// }
// return (int)set.toArray()[0];
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
文章来源: blog.csdn.net,作者:吾日三省贾斯汀,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/JustinQin/article/details/120829520
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)