第一题
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循环遍历大量数据,获得每个数的约数数量。