思路:
先利用快速排序,对数组进行排序后相同数字就会在一堆,只需判断nums[i]与nums[i+1]是否相等就行,
相等我们整体向后移动三位进再次进行判断,不相等就是该值了。但要注意边界问题,数组长度为1或者
该数字在最后一位,因为我们只遍历到了nums.length-1,在排序后res=nums[nums.length-1]就避免了
这种情况。
样例
class Solution {
public int findNumberAppearingOnce(int[] nums) {
Arrays.sort(nums);
int res=nums[nums.length-1];
for(int i=0;i<nums.length-1;i++){
if(nums[i]==nums[i+1])i+=2;
else res=nums[i];
}
return res;
}
}
虽然题目中要求是o(n),但是面试中我觉得你这个比较好想