ps:本文章仅用来记录日常学习的所思所想,各位看到可取之处也可纳为己用,说的不对的地方还请多多指教。
1.题目描述
只出现一次的数(简单)
给你一个 非空 整数数组
nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1] 输出:1示例 2 :
输入:nums = [4,1,2,1,2] 输出:4示例 3 :
输入:nums = [1] 输出:1提示:
1 <= nums.length <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
- 除了某个元素只出现一次以外,其余每个元素均出现两次。
2.题目分析
今天比较忙,来一道简单点的。看着示例1,想到了排序然后用指针遍历数组来做,但是无法解决像示例2中当只出现一次的数在最后一个的情况,所以就有了我一次失败的尝试。
失败的尝试
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
int result = 0;
int n = nums.length;
if(n < 2){
return nums[0];
}
for(int i = 0; i < n - 1; i++){
if(nums[i] == nums[i+1]){
i++;
}else if(){
result = nums[n-1];
}
}
return result;
}
}
别学,是错的 。
看了官方题解恍然大悟,原来我是学过数据结构的呀。
位运算
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for(int n : nums){
single ^= n;
}
return single;
}
}
来源于力扣
里面的“^”就是《数据结构》中学的异或算法。
3.总结
要学会善于利用学过的知识。