不看后悔一辈子,每日练习(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;
    }

}

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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶光不负

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值