题目如下:
给出的输出示例如下:
分析思路:
1.第一种思路:
通过暴力解法,双重循环遍历,如果遇见相同的数字(本身和数组中另外一个相同的数),那就用一个计数器temp++(temp初始化为0),最后当temp等于1的时候输出该次数组中存在的值即是我们要求的只出现过一次的数
参考代码如下:
class Solution {
public int singleNumber(int[] nums) {
for(int i=0;i<nums.length;i++){
int temp=0;
for(int j=0;j<nums.length;j++){
if(nums[i]==nums[j]){
temp++;
}
}
if(temp==1){
return nums[i];
}
}
return 0;
}
}
第二种思路:
利用按位异或的思想,相同为0,不同为1,题目中除了一个只出现一次的数之外,其他的数都只会出现两次,两次相同的数异或下来全为0那么自然不会妨碍我们得出那只出现了一次的数。
参考代码如下:
class Solution {
public int singleNumber(int[] nums) {
int res = nums[0];
for(int i=1;i<nums.length;i++){
res = res^nums[i];
}
return res;
}
}
两种算法比较下来,自然是第二种算法更加巧妙,运算效果更高。