算法学习(一)位运算练习

位运算应用

案例:输入一串数组并赋值,赋值的范围为1~arr.length-1,然后生成一个随机数(1 ~ arr.length-1),将生成的随机数放在arr[arr.length-1] ,生成一个随机位置,将数组最后一位和生成的随机位置所在的数组交换,最后找出重复的那个数组。

public class FindRepetition {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("-------------请输入数组的长度------------");
        int N = scanner.nextInt()+1;
        int[] ints = new int[N];
        //solution01(ints);
        solution02(ints);
    }


    public  static  void solution01(int ints[]){
        int N = ints.length;
        for (int i = 0; i < ints.length-1; i++) {
            ints[i]=i+1;
        }
        Random random = new Random();
        int ran = random.nextInt(ints.length - 1)+1;
        ints[ints.length-1]=ran;
        int index = new Random().nextInt(N);
        //需要交换
        changePositionByIndex(ints,index);
        print(ints,5);
        shuffleArr(ints);
        print(ints,5);
        int temp=0;
        for (int i = 0; i < ints.length; i++) {
            temp = temp^ints[i];
            for (int j = 0; j < ints.length - 1; j++) {
                temp = temp ^ (j+1);
            }
        }
        System.out.println(temp);
    }

    public static  void solution02(int ints[]){
        System.out.println("----------------------");
        int N = ints.length;
        for (int i = 0; i < ints.length-1; i++) {
            ints[i]=i+1;
        }
        Random random = new Random();
        int ran = random.nextInt(ints.length - 1)+1;
        ints[ints.length-1]=ran;
        int index = new Random().nextInt(N);
        //需要交换
        changePositionByIndex(ints,index);
        print(ints,6);

        int[] helper = new int[ints.length - 1];
        for (int i = 0; i < helper.length+1; i++) {
            helper[ints[i]-1]++;
        }
        for (int i = 0; i < helper.length; i++) {
            if(helper[i]==2){
                System.out.println(ints[i]);
            }
        }
    }

    public  static  void  changePositionByIndex(int arr [] , int index){
        for (int i = 0; i < arr.length -1 ; i++) {
            int temp =  arr[arr.length-1];
            arr[arr.length-1]=arr[index];
            arr[index]=temp;
        }
    }
    
    public  static  void print(int arr [],int columns){

        for (int i = 0; i < arr.length; i++) {
            if(i==0 || i==arr.length-1){
                if(i==0){
                    System.out.print("["+arr[i]+';');
                }else {
                    System.out.print(arr[i]+"]"+"\n");
                }
            }else {
                if(i%columns == 0){
                    System.out.print("\n"+arr[i]+";");
                }else {
                    System.out.print(arr[i]+";");
                }
            }
        }
    }

    public static void shuffleArr(int arr []){
        int len = arr.length;

        for(int i = 0;i < len; i++){
            int currentRandom = new Random().nextInt(len-1);
            int current = arr[i];
            arr[i] = arr[currentRandom];
            arr[currentRandom] = current;
        }
    }
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xueshanfeitian/article/details/109279755