只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解题思路:
- 很简单,先用sort方法对数组进行排序。
- 然后对数组进行一次遍历,因为其余每个元素均出现两次,所以循环每次加2。
- 如果遇到前一位与后一位不同的话,那么这一位就是只出现了一次的元素。返回这个元素就行了。
代码如下:
public int singleNumber(int[] nums) {
Arrays.sort(nums); //用sort方法对数组排序
for(int i=0;i<nums.length-1;i+=2) { //因为要与后一位进行判断,所以只能到最后一位的前一位,以防数组下标越界。
if(nums[i]!=nums[i+1]) { //如果这一位与后一位不同,那么这一位就是单独只出现过一次的数。返回这个数就行了。
return nums[i];
}
}
return nums[nums.length-1]; //如果遍历成功结束的话,那么最后一位就是单独出现一次的数字
}