蓝桥杯第五弹

文章包含四道LeetCode编程题的解决方案。第一题是找出数组中只出现一次的数字;第二题要求计算二进制表示中连续1之间的最大距离;第三题检查一个数的每一位是否都是奇数;第四题寻找具有特定约数数量的数字。
摘要由CSDN通过智能技术生成

第一题

package Leecode2;

import java.util.Arrays;

//136只出现一次的数字
public class Main5 {
public static void main(String[] args) {
	int nums[]= {4,1,2,1,2};
	      // int arr[]=new int[nums.length];
	       int a=0;
	       Arrays.sort(nums);
	       for(int i=0;i<nums.length-1;i++){
	           if(i==0&&nums[0]!=nums[1]){
	               a=nums[0];
	           }else if(i>0&&nums[i]!=nums[i+1]&&nums[i]!=nums[i-1]){
	               a=nums[i];
	           }else if(i+1==nums.length-1&&nums[i+1]!=nums[i]) {
	        	   a=nums[i+1];
	           }
	       }
	       if(nums.length==1) {
        	   a=nums[0];
           }
	       System.out.println(a);
	   
}
}

 首先将数组nums排序,然后判断每个元素是否与前后相等,如果在开头,只与后面判断,反之亦然。

第二题

class Solution {
    public int binaryGap(int n) {
     String a=Integer.toString(n,2);
     
     int distance=n;
     int max=0;
     for(int i=0;i<a.length();i++){
         if(a.charAt(i)=='1'){
             max=Math.max(max,i-distance);
             distance=i;
         }
     } 
    return max;
    }
}

先把十进制数转为二进制字符串,遍历该字符串,当某个字符为一时,比较上次两个一的距离和这次那个更大,把更大的赋值给max。最终返回max 

第三题

public class Main {
   public static boolean is(int n){
        while(n>0){//是不是奇数取决于最后一个数字
          if(n%2==0) return false;
          n/=10;
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        for(int i=2019;;i+=2019){
          if(!is(i)){
            continue;
          }
          if(is(i)){
            System.out.println(i);
            break;
          }
        }
        scan.close();
    }
   
}

i是2019的倍数,判断i是否每个数字都是奇数,每次将n除以10即可,因为是不是奇数取决于最后一个数字。当每个数字都是奇数时,返回true。如果是奇数,结束整个循环,如果不是,结束当前循环。 

第四题

package lanqiao2;

import java.util.Scanner;
//1:无需package
//2: 类名必须Main, 不可修改

public class Main5 {
 public static void main(String[] args) {
     Scanner scan = new Scanner(System.in);
     //在此输入您的代码...
     int count=0;
     for(int i=45300;i<46000;i++){
    	 count=0;
       for(int j=1;j<=i;j++){
         if(i%j==0){
           count++;
         }
         
       }
       //System.out.println(count);
       if(count==100){
         System.out.println(i);
           break;
         }
     }
     
     scan.close();
 }
}

暴力算法,用for循环遍历大量数据,获得每个数的约数数量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值