转载请注明出处 https://blog.csdn.net/qq_31715429/article/details/80279561
本文出自:猴菇先生的博客
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
1.国际惯例,先上自己写的,得益于上一题,咱也学会了先排序在处理问题,排好序后确实好处理了,元素成对出现,中间或者末位夹杂着“单身狗”。。单层for循环,i每次加2,如果循环结束后没发现“单身狗”,那么它必然藏在最末位了。执行6ms美滋滋。
class Solution {
public int singleNumber(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
Arrays.sort(nums);
for (int i = 0; i < nums.length - 1; i+=2) {
if (nums[i] != nums[i + 1]) {
return nums[i];
}
}
return nums[nums.length - 1];
}
}
2.别人写的耗时1ms。。使用 ^=,我java可能是白学了,位运算符,^=代表异或,转化成二进制的两个数,同一位上的数相同得0,不同得1。一个整数和它本身异或之后得到值是0,0与其他整数异或得到的是这个整数本身,套在这个题里面,也就是如果两个数相同,那么它们异或得0
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
result ^= nums[i];
}
return result;
}
}
曾梦想仗剑走天涯。。