简单的数
/**
- 给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
- 输入:[1,1,2,2,3,4,4]
- 输出:3 (仅3出现一次)
*/
public class singleNumber {
//思路:先把数组转为list,然后循环判断,定义变量接受删除的元素值,
//然后判断剩余的列表中是否存在该值,如果存在则继续遍历,否则停止循环,返回当前删除元素的值
public static void singleNumber(int[] A) {
if (A==null || A.length<=0){
return -1;
}
//将int型数组转成list,便于增删改
List<Integer> lists = Arrays.stream( A ).boxed().collect(Collectors.toList());
int rm = 0;
for (int i = 0; i < lists.size(); i++) {
rm = lists.remove(i);
//如果剩余的列表中不包含删除的这个值,则终止循环,返回rm值
if (!lists.contains(rm)) {
break;
}
}
return rm;
}
public static void main(String[] args) {
System.out.println(singleNumber(new int[]{1,1,3,2,2}));
}
}
借鉴大神思路:
//利用异或的性质(自反性),即:自反性:a ^ b ^ a = b
//时间复杂度O(n),空间复杂度O(1)
public int singleNumber(int[] A) {
if(A==null || A.length<=0)
return -1;
int num=0;
for(int i=0;i<A.length;i++){
num^=A[i];
System.out.println(num);
}
return num;
}