zoukankan      html  css  js  c++  java
  • 算法基础练习-_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

  • 相关阅读:
    常见linux内核线程说明
    /proc/modules分析
    linux用户空间和内核空间(内核高端内存)_转
    二层交换机/三层交换机/路由器
    NAT--Network Address Translator
    curl命令使用
    (转)XML中必须进行转义的字符
    LFCP
    IPSP问题
    API和schema开发过程问题汇总
  • 原文地址:https://www.cnblogs.com/btlord/p/14404139.html
Copyright © 2011-2022 走看看