题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
思路
使用hashmap,遍历数组,将数字的值作为键,将数字出现的次数作为值,如果数字没有在hashmap中,添加键值(数字,1);如果出现过,添加(数字,2),遍历hashmap,找到值为1对应的键。即为答案。
代码实现
package 高频题2018.热身.热身;import java.util.HashMap;/*
**题目**:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
**说明**:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
**示例 1**:
输入: [2,2,1]
输出: 1
**示例 2**:
输入: [4,1,2,1,2]
输出: 4*/
public class 只出现一次的数字 {public static void main(String[] args) {int[] arr &#61; {2,2,1};System.out.println(repeatNum(arr));}public static int repeatNum(int[] arr){//使用hashmap&#xff0c;数字的数值作为键&#xff0c;出现次数作为值HashMap kv &#61; new HashMap<>();for(int i &#61; 0;i }
结果
方法二&#xff1a;更简便 异或实现
思路
异或运算的特点&#xff1a;两个相同的数字异或&#xff0c;结果为0。
因为数组中除了一个元素只出现一次之外&#xff0c;其它的元素都出现两次&#xff0c;如果把所有的数都异或&#xff0c;相同的数字异或为0&#xff0c;最后只剩下出现一次的数字&#xff0c;它和0异或&#xff0c;结果就是它本身。
代码
public class 只出现一次的数字 {public static void main(String[] args) {int[] arr &#61; {2,4,1,1,2};
// System.out.println(repeatNum(arr));System.out.println(singleNumber(arr));}public static int singleNumber(int[] nums) {int num &#61; 0;for(int i &#61; 0; i }
方法二参考&#xff1a;https://blog.csdn.net/baidu_40931662/article/details/83892506