给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
第一种自己写的想法比较简单leetcode 耗时 0ms; 我感觉有问题,可能会多一点。
解决思路:
仔细审题发现每个元素均出现两次,也就是说经过排序后一定会有下面三种情况出现
abbcc 在最左边
bbacc 在最中间,出现在中间这种情况长度一定超过或等于5
bbcca 在最右边
下面是代码,通过比对 i-1,1-2 和 i+1 , i+2 的大小,确定上述形式
let mut v = nums; v.sort(); let len = v.len(); if len == 1 { return v[0]; } if v[0]!=v[1]&&v[1]==v[2]{ return v[0]; } if v[len-3]==v[len-2]&&v[len-2]!=v[len-1]{ return v[len-1]; } for i in 2..len-2 { if v[i-1] == v[i-2] && v[i+1] ==v[i+2] { return v[i]; } } return 0
第二种使用异或运算一行代码解决
nums.iter().fold(0, |a, x| a ^ x)
原文:https://www.cnblogs.com/Addoil/p/13387113.html