• 算法基础练习-_01找出唯一成对的数


    题目:  1-1000这1000个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?

     1 import java.util.Arrays;
     2 import java.util.Random;
     3 
     4 public class _01唯一成对的数 {
     5     public static void main(String[] args) {
     6         int N = 11;
     7         int[] arr = new int[N];
     8         for (int i = 0; i < arr.length - 1; i++) {
     9             arr[i] = i + 1;
    10         }
    11         //最后一个数,是随机数
    12         arr[arr.length - 1] = new Random().nextInt(N - 1) + 1;
    13         //随机下标
    14         int index = new Random().nextInt(N);
    15         swap(arr, index, arr.length - 1);
    16         print(arr);
    17     /*
    18     采用异或的方法将重复的值找出(不使用辅助空间)*/
    19         int x1 = 0;
    20         for (int i = 1; i <= N - 1; i++) {
    21             x1 = (x1 ^ i);
    22         }
    23         for (int i = 0; i < N; i++) {
    24             x1 = x1 ^ arr[i];
    25         }
    26         System.out.println(x1);
    27 //  使用辅助空间
    28         System.out.println("==========");
    29         int[] helper = new int[N];
    30         for (int i = 0; i < N; i++) {
    31             helper[arr[i]]++;   // 将重复的数的重复次数在helper数组里自加
    32         }
    33         print(helper);
    34         for (int i = 0; i < N; i++) {
    35             if (helper[i] == 2) {
    36                 System.out.println(i);
    37                 break;
    38             }
    39         }
    40     }
    41 
    42     /**
    43      * 将数组的两个值交换
    44      *
    45      * @param arr
    46      * @param i
    47      * @param j
    48      */
    49     public static void swap(int[] arr, int i, int j) {
    50         int tmp = arr[i];
    51         arr[i] = arr[j];
    52         arr[j] = tmp;
    53     }
    54 
    55     /**
    56      * 打印数组
    57      *
    58      * @param arr
    59      */
    60     public static void print(int[] arr) {
    61         System.out.println(Arrays.toString(arr));
    62     }
    63 }

                                                     2021-02-15

  • 相关阅读:
    微信小程序开发——修改小程序原生checkbox、radio默认样式
    微信小程序开发——微信小程序下拉刷新真机无法弹回
    转:slf4j-api、slf4j-log4j12、log4j之间关系
    MyBatis3 入门学习指南
    Java 多线程重排序的探究
    Kafka 生产者和消费者入门代码基础
    Java面试题
    刻苦读书的故事合集
    Win10 calc.exe 无法打开计算器的解决方法
    Redis(三):set/get 命令源码解析
  • 原文地址:https://www.cnblogs.com/btlord/p/14404139.html
Copyright © 2020-2023  润新知