题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:输入 [4,1,2,1,2] 输出 4
解法
上述三种解法都需要额外使用 O(n) 的空间,其中 n 为数组长度。如果要求使用线性时间复杂度和常数空间复杂度,上述三种解法显然都不满足要求。
要求:
-
时间复杂度:O(n),其中 n 为数组长度。只需对数组遍历一次。
-
空间复杂度:O(1)。
解法:
class FindSingleNum {
public int findNum(int[] nums){
Arrays.sort(nums);
int num = 0;
int l = nums.length;
if(l == 1) return nums[0]; // 元素只能为奇数个,故数组长度最小为1
if((l > 2) && (nums[0] != nums[1])) return nums[0];