力扣每日一题:260. 只出现一次的数字 III
给你一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。
示例 1:
输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。
示例 2:
输入:nums = [-1,0]
输出:[-1,0]
示例 3:
输入:nums = [0,1]
输出:[1,0]
提示:
2 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
- 除两个只出现一次的整数外,
nums
中的其他数字都出现两次
朴素题解
-
题目说明: 只有两个元素只出现一次,其余元素都是出现两次
-
核心思路:通过排序让相同元素变成连续的,然后逐个比较,在比较中有两种情况。
-
两个指针所指向的值相同,则该元素出现了两次,继续遍历
n[i] == n[j]; i += 2; j += 2;
-
两指针所指向的值不同,则该元素出现一次,加入到res数组
n[i] != n[j]; res[idx] = nums[i]; i ++; j ++;
-
完整代码:
class Solution {
public int[] singleNumber(int[] nums) {
// 先排序一下
Arrays.sort(nums);
int[] res = new int[2];
int len = nums.length;
res[1] = nums[len - 1];
int i = 0, j = 1, idx = 0;
while (j < len) {
if (nums[i] != nums[j]) {
res[idx] = nums[i];
if (idx > 1) {
return res;
}
idx ++;
i ++;
j ++;
} else {
i += 2;
j += 2;
}
}
return res;
}
}
哈希表
未完待续....
位运算
未完待续....
评论区