现在有一个整数类型的数组,数组中素只有一个元素只出现一次,其余的元素都出现两次。
数据范围: , 数组中每个值满足
进阶: 空间复杂度 ,时间复杂度
进阶: 空间复杂度 ,时间复杂度
//思路:两个相同的数异或为0 //例子:1^2^3^4^4^3^2 = 2^2^3^3^4^4^1 = 1 public class Solution { public int singleNumber(int[] A) { int result = A[0]; for(int i=1; i<A.length; i++){ result = result ^ A[i]; } return result; } }
package test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * @param lanxuewei * 一个数组中除一个数字X外其他每个数字都出现两次,找出这个数字X * */ public class SingleNum1 { /** * 遍历数组,判断当前数字是否存在于Set集合中,如果存在则删除,不存在则加入。 * 最后只剩下只出现一次的数字X,返回即可。 * 拓展:如果出现多个只出现一次的数字同样适用,不需要遍历,直接返回set即可。 * */ public int simgleNum(int[] A){ Set<Integer> set = new HashSet<Integer>(); int result = 0; for(int i = 0; i <= A.length - 1; i++){ if(set.contains(A[i])){ set.remove(A[i]); } else { set.add(A[i]); } } Iterator<Integer> it = set.iterator(); while(it.hasNext()){ result = it.next(); } return result; } public static void main(String[] args) { //测试数据 int arr[] = {1,2,2,3,3,4,4,5,5}; SingleNum1 test = new SingleNum1(); System.out.println(test.simgleNum(arr)); } }