题目描述
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
一、思路
利用一个双重循环,把每一个数和数组里其他数比较,遇到相等的就终止内层循环(即这个数不符合要求,无需再比较),没有相等的则记录下来。
二、完整代码
class Solution {
public int[] singleNumber(int[] nums) {
int result[] = new int[2]; // 结果数组
int t=0;
for(int i=0;i<nums.length;i++){
int j;
for(j=0;j<nums.length;j++){
if(i!=j && nums[i]==nums[j])
break;
}
// 扫描了整个数组,nums[i]没有与该数组最后一个数以前的任一个数相等
// 注意:这漏了一种情况,即nums[i]为最后一个数的情况
if(j==nums.length && nums[i]!=nums[j-1]){
result[t]=nums[i];
t++;
}
}
// 最后一个数为所求时的情况
if(t<2)result[t]=nums[nums.length-1];
return result;
}
}
三、进阶
可以先将数组里的数排序,先比较前两个,如果第一个数和第二个数相等,则直接跳到第三个数继续往后比较;若第一个数和第二个数不相等,则第一个数为所求之一,再跳到第二个数继续往后比较。
其他的有时间再来更吧~