刷爆Leetcode之 只出现一次的数字

只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 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];		//如果遍历成功结束的话,那么最后一位就是单独出现一次的数字
	        
}

猜你喜欢

转载自blog.csdn.net/weixin_42233291/article/details/82817120