Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
1.题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
Tips: 力扣地址:leetcode-cn.com/problems/si…
2. 思路分析
这个题目的解题关键在于其余的元素均出现两次,只有一个出现一次。这个让我们想到了在学习编程的时候对于^(异或运算)有这样的特点:
- 任何数字异或自己都等于0,也就是例如a=10,那么a^a=0
- 0异或任何数字都等于该数字,也就是0^a=a
- 异或运算满足交换律和结合律,也就是a^b^c=(a^c)^b
那么根据异或运算的特点,以及题目题干给出来的除了某个元素只出现一次以外,其余每个元素均出现两次。只需要遍历数组,进行异或运算就能找到只出现一次的值
3. AC代码
class Solution {
public int singleNumber(int[] nums) {
int a = nums[0];
for(int i = 1; i < nums.length; ++i){
a = a ^ nums[i];
}
return a;
}
}
提交代码检验正确性:
完全正确
4. 总结
整个题目的关键就是的元素均出现两次,只有一个出现一次,然后对异或运算的特点的巧妙运用就能轻松解决问题。(这些小的技巧平时在业务代码中也是可以用到的)
我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢