Given an array of integers, every element appears twice except for one. Find that single one.
Could you implement it without using extra memory?
A:
就是先排序,然后两两对比
public class Solution {
public int singleNumber(int[] A) {
// Note: The Solution object is instantiated only once and is reused by each test case.
Arrays.sort(A);
if(A.length==1){
return A[0];
}
for(int i =0;i+1<A.length;i=i+2){
if(A[i] != A[i+1]){
return A[i];
}
}
// now only the last one is not checked.
// we can returned it.
return A[A.length-1];
}
}
下面是高手做的。 你TND 都傻了吧??? 而且人家不用排序(⊙o⊙)哦public class Solution {
int singleNumber(int A[]) {
int n = A.length;
if(n<0)return -1;
int res = 0;
for(int i =0;i<n;i++)
res ^= A[i];
return res;
}
}
Mistakes:
1: 没有考虑A.length == 1的情况。
2: 没有考虑, 当i+1 越界的情况。
3: 当排序后,是最后一个single的时候,我们要返回最后一个。
Learned:
1: ^ 运算符
----------------第二遍-----------------只要三行--------------
---------3 rd ----------------------class Solution { public: int singleNumber(vector<int>& nums) { int res = 0; for(auto v : nums) res = res ^ v; return res; } };
class Solution { public: int singleNumber(vector<int>& nums) { int res = 0; for(int i =0;i<nums.size();++i) nums[0] ^= nums[i]; return nums[0]; } };
No comments:
Post a Comment