LeetCode136 只出现一次的数字 Java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaoen1/article/details/102768293

只出现一次的数字 LeetCode136

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

说明:

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

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

解法一

/**
* 使用一个list保存数字 
* 遍历数组, 
* 如果list不包含数字,则放入 
* 如果list包含数字,则移出 
* 遍历结束以后剩余的数就是只出现了一次的数字。
* 时间复杂度O(N)
*/
public int singleNumber(int[] nums) {
	ArrayList<Integer> list = new ArrayList<Integer>();

	for (int i = 0; i < nums.length; i++) {
		if (list.contains(nums[i])) {
			list.remove((Integer) nums[i]);
		} else {
			list.add(nums[i]);
		}
	}
	return list.get(0);
}

解法二

/**
* 位运算 a^a^b = b 时间复杂度O(N)
*/

public int singleNumber1(int[] nums) {
	int res = 0;
	for (int i : nums) {
		res ^= i;
	}
	return res;
}

猜你喜欢

转载自blog.csdn.net/xiaoen1/article/details/102768293
今日推荐