蓝桥学院2019算法题1.2

  两种方式实现:

 1 package bitOperation;
 2 
 3 import java.util.Arrays;
 4 import java.util.Random;
 5 
 6 /**
 7  * @author zsh
 8  * @company wlgzs
 9  * @create 2019-02-14 10:12
10  * @Describe 题目·
11  * 找出唯一成对的数1-1000这1000个数放在含有1001个元素的数组中,
12  * 只有唯一的个元素值重复,其它均只出现一次。
13  * 每个数组元素只能访问一次,设计一个算法,将它找出来;
14  * 不用辅助存储空间,能否设计一个算法实现?
15  */
16 public class Main1 {
17     public static void main(String[] args) {
18         //总数N
19         int N = 11;
20         int[] arr = new int[N];
21         //生成1-1000的随机数,范围[0,N)
22         int index = new Random().nextInt(N-1)+1;
23         //给数组的元素赋值
24         for (int i = 0; i < arr.length-1; i++) {
25             arr[i]=i+1;
26         }
27         //最后一个数,是随机数
28         arr[arr.length-1] = index;
29         //打印数组
30         System.out.println(Arrays.toString(arr));
31         int x1 = 0;
32         for (int i = 1; i < N; i++) {
33             x1 = x1 ^ i;
34         }
35         for (int i = 0; i < N; i++) {
36             x1 = x1 ^ arr[i];
37         }
38         System.out.println(x1);
39 
40         System.out.println("---------------使用辅助空间实现--------------------");
41         int[] helper = new int[N];
42         for (int i = 0; i < N; i++) {
43             //将每个数出现的数量放在0-1000个元素中
44             helper[arr[i]]++;
45         }
46         for (int i = 0; i < N; i++) {
47             if (helper[i] == 2){
48                 System.out.println(i);
49             }
50         }
51 
52     }
53 }

知识补充:与:都为1结果为1 & ;或:有一个为1结果为1 | ;异或:二者不同时结果为1 ^

异或可以理解为不进位加法。1+1 = 0, 0 + 0 = 0,1 + 0 = 1。

判断奇偶数 x&1 == 1 奇数; x&1 == 0 偶数。

posted @ 2019-02-14 10:50  梨花梦蝶  阅读(208)  评论(0编辑  收藏  举报