题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解题思路
将数组所有元素进行异或运算,运用的原理就是:
1.相同的数字异或为0
2.任何数字与0异或为本身
3.异或运算满足交换律
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
public class onceNum {
//只出现一次的数字
public int singleNum(int[] nums){//acc:1ms 99%
//相同的数字异或为0
// 任何数字与0异或为本身
//异或运算满足交换律
int ans=nums[0];
if (nums.length>1){
for (int i=1;i<nums.length;i++){
ans=ans^nums[i];
}
}
return ans;
}
public static void main(String[] args) {
onceNum test=new onceNum();
int[] nums={1,2,1,2,3};
int num=test.singleNum(nums);
System.out.println(num);
}
}
总结
本题来源于Leetcode中 归属于位运算类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿