不看后悔一辈子,每日练习(Java练习)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不看后悔一辈子,每日练习(Java练习)相关的知识,希望对你有一定的参考价值。

一,给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数。

public class Test {
    public static void main(String[] args)  {
       int arr[] = new  int[]{1,3,2,4,5,6,7,8,9,9,10};
       int val=repeatNumber2(arr);
       System.out.println(val);
       for (int i = 0; i <arr.length ; i++) {
           if(val==i){
               System.out.println(arr[i]);
           }
       }
    }
    //此方法必须有序才能查找
    public static int repeatNumber1(int[] nums){
        int ans=1;
        for (int i = 0; i < nums.length-1 ; i++) {
            if(0 == (nums[ans] ^ nums[i])){
                return ans;
            }else {
                ans++;
            }
        }
        return -1;
    }
    //异或方法,二二相同异或为0,0^任何数为它本身
    public static int repeatNumber2(int[] nums){
            int ans=0;
            for (int i = 0; i < nums.length; i++) {
                ans^=i;
            }
            for (int i = 0; i < nums.length; i++) {
                ans^=nums[i];
            }
            return ans;
        }
}

二,(力控:905)

 




import java.util.Scanner;

public class Test {
    public static void main(String[] args)  {
        int arr[]=new int[]{4,3,2,1};
        int arrs[]=sort(arr);
        for (int i = 0; i <arrs.length ; i++) {
            System.out.println(arrs[i]);
        }
    }
    //双指针
    public static int[] sort(int []arr){
        int right=0;
        int left=arr.length-1;
        int arrs[]=new int[left+1];
        for (int i = 0; i <= left+1 ; i++) {
            if(arr[i]%2==0){
                arrs[right]=arr[i];
                right++;
            }else {
                arrs[left]=arr[i];
                left--;
            }
        }
        return arrs;
    }

}

三,小明今年18岁了,按照常理来说点18根蜡烛,他想了想,自己不是常人,18用二进制表示就是10010表示,于是找来了五根蜡烛点燃其中二根,,开开心心过上了生日(点亮表示为1),如果有一个x岁了,需要m根蜡烛,点燃n根,以知x,求m,n(1<=x<=500).


import java.util.Scanner;

public class Test {
    public static void main(String[] args)  {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入您的年龄:");
        int age=sc.nextInt();
        String age2=additionTwoNumber(age);
        int num=age2.length();
        System.out.println(age2);
        int bright=0;
        for (int i = 0; i <age2.length() ; i++) {
            if('1'==age2.charAt(i)){
                bright++;
            }
        }
        System.out.println("需要:"+num+"根蜡烛");
        System.out.println("需要点亮:"+bright+"根蜡烛");
        sc.close();
//      使用包装类,把十进制转化为二进制
//      String ernum=Integer.toBinaryString(age);
//      System.out.println(ernum);
    }
    //除二取余法,去2取余排列,小编没有倒叙,倒叙就是该数的二进制数
    public static String additionTwoNumber(int num){
        String s="";
        while (num>0){
            s+=num%2;
            num/=2;
        }
        return s;
    }

}

四,给定一个数组,已知数组中的元素都是成对出现,现在数组中只有一个元素没有成对,请找出这个元素。(力控,136,137题)
 如:[1,2,3,4,5,5,4,3,1]  则2没有成对出现。

public class Test {
        public static void main(String[] args)  {
            int arr[] = new  int[]{1,1,2,2,3,4,4,};
            int val=singleNumber(arr);
            System.out.println(val);
        }
        //异或方法,相同抵消为0,0异或为本身。
        public static int singleNumber(int[] nums){
            int ans=0;
            for (int i = 0; i < nums.length; i++) {
                ans^=nums[i];
            }
            return ans;
        }
        
        //重复数值出现多次出现
        public int singleNumber(int[] nums) {
        int ans=0;
        for(int i=0;i<32;i++){
            int count=0;
            for(int num:nums){
                if((num>>>i&1)==1){
                    count++;
                }
            }
            if(count%3!=0)
                ans =ans|1<<i;
        }
        return ans;
    }

}

好了,希望小编的解答对你有所帮助!

以上是关于不看后悔一辈子,每日练习(Java练习)的主要内容,如果未能解决你的问题,请参考以下文章

es head插件的详情详细说明,不看后悔一辈子

练习06.17|每日一练Java编程笔试面试题

使用Java语言深入理解程序逻辑之方法(不看必后悔)

使用Java语言深入理解程序逻辑之方法(不看必后悔)

使用Java语言深入理解程序逻辑之方法(不看必后悔)

练习07.17|每日一练Java编程笔试面试题