Java算法面试题

#Java算法

1、盒子中有n个小球每次取一个或者两个有多少种取法

代码如下(示例):

//反向思路,假如有5个球每次取一个或者两个,相加直到递归最终取完。
 public static void main(String[] args) {
 System.out.println(StepWay(5));
}
public static int StepWay(int n){
        if(n<1){
 //判断输入是否错误
            return 0;
        }else if(n==1){
//1个球只有一种取法        
            return 1;
        }else if(n==2){
//2个球2种取法       
            return 2;
        }else{        
            return StepWay(n-1)+StepWay(n-2);
        }
    }

2.三位水仙花数的各个数值的里放相加等于本身如153=1x1x1+5x5x5+3x3x3

代码如下(示例):

 public static void main(String[] args) {
 outNumber() ;
}
public static void outNumber(){
        int a=0;
        int b=0;
        int c=0;
        for(int i=100;i<1000;i++){
            a=i/100;
            b=i/10%10;
            c=i%10;
            if(a*a*a+b*b*b+c*c*c==i){
                System.out.print(i+"  ");
            }
        }
    }

3.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

 public static void main(String[] args) {
 rabit() ;
}
 public static void rabit(){
        int f1=1;
        int f2=2;
        int f=0;
        int m=30;
        for(int i=3;i<m;i++){
            f=f2;
            f2=f1+f2;
            f1=f;
            System.out.println(f2);
        }
    }

4、101-200之间有多少个素数

 public static void main(String[] args) {
 judgeCnt() ;
}
 public static void judgeCnt(){
   int cnt=0;
        for(int i=101;i<=200;i++){
            int n=2;
            Boolean flag=true;
            while(n*n<i){
                if(i%n == 0){
                    flag=false;
                }
                n+=1;
            }
            if(flag==true){
                cnt+=1;
            }
        }
        System.out.println(cnt);
    }

5、解质因素90=2x3x3x5

 public static void main(String[] args) {
 FenJie() ;
}
 public static void FenJie(){
   Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数");
        int ip=sc.nextInt();
        int k=2;
        while(ip>=k){
            if(ip==k){
                System.out.println(ip);
                break;
            }else if(ip%k==0){
                System.out.print(k+"*");
                ip=ip/k;
            }else{
                k++;
            }

        }
    }

6、冒泡排序

 public static void main(String[] args) {
 Maopao() ;
}
 public static void Maopao(){
  int [] arr1={2,3,1,7,8,9};
        int temp=0;
        for(int i=0;i<arr1.length-1;i++){
            for(int j=0;j<arr1.length-1-i;j++){
                if(arr1[j]>arr1[j+1]){
                    temp=arr1[j+1];
                    arr1[j+1]=arr1[j];
                    arr1[j]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr1));
    }

7、快速排序

 public static void main(String[] args) {
 quickSort() ;
}
 public static void quickSort(){
         int [] arr1={2,3,6,9,4};
        int left=0;
        int right=arr1.length-1;

        SortArr(arr1,left,right);
        System.out.println(Arrays.toString(arr1));
    }
  public static int [] SortArr(int [] arr1,int left,int right){
        if(arr1.length==0||left>right){
            return  arr1;
        }
        //设为基准数
        int base=arr1[left];
        int temp=0;
        int i=left;
        int j=right;
        while(i!=j){
            while(i<j&&arr1[j]>base){
                j--;
            }
            while(i<j&& arr1[i]<=base){
                i++;
            }
            if(arr1[i]>arr1[j]) {
                temp = arr1[j];
                arr1[j] = arr1[i];
                arr1[i] = temp;
            }
        }
        //交换中间数
        arr1[left]=arr1[i];
        arr1[i]=base;
        SortArr(arr1,left,i-1);
        SortArr(arr1,i+1,right);
        return arr1;
    }

8、两个有序数组合并成一个有序数组

 public static void main(String[] args) {
 CombieArr() ;
}
   public static void CombieArr(){
        int []arr1={2,4,6,8};
        int [] arr2={1,3,5,7,9};
        int i=0;
        int j=0;
        int k=0;
        int [] arr3=new int [arr1.length+arr2.length];
        while (i<arr1.length&&j<arr2.length){
            if(arr1[i]<arr2[j]){
                arr3[k++]=arr1[i++];
            }else{
                arr3[k++]=arr2[j++];
            }
        }
        while (i<arr1.length){
            arr3[k++]=arr1[i++];
        }
        while(j<arr2.length){
            arr3[k++]=arr2[j++];
        }
        System.out.println(Arrays.toString(arr3));
    }

9、折半二分查找

 public static void main(String[] args) {
 find2() ;
}
    public static void find2(){
      int mid=0;
      int cnt=1;
      Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数:");
      int num=sc.nextInt();
      int [] arr={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
      int left=0;
      int right=arr.length-1;
      while(left<=right){
        mid=(left+right)/2;
        if(num==arr[mid]){
            System.out.println("第"+cnt+"次找到"+num+",在"+mid+"处找到");
            break;
        }else if(num<arr[mid]){
            right=mid-1;
        }else if(num>arr[mid]){
            left=mid+1;
        }
        cnt+=1;
      }

    }

10、字符串种只出现一次的字符

 public static void main(String[] args) {
 Once() ;
}
    public static void Once(){
        String str="abcabcacbefefadeh";
    LinkedHashMap<Character,Integer> map=new LinkedHashMap<Character,Integer>();
    for(int i=0;i<str.length();i++){
          if(!map.containsKey(str.charAt(i))){
             map.put(str.charAt(i),1);
          }else{
              map.put(str.charAt(i),map.get(str.charAt(i))+1);
          }

    }
    for(int i=0;i<str.length();i++){
    if(map.get(str.charAt(i))==1){
        System.out.println(str.charAt(i)+"第"+i+"个");
    }
    }
}

总结

提示:字符串转换为数字这样的"-13542"->-13542只要用好 number=number10+arr[i]-'0’基本没什么难度;判断数组丢失的值这种基本上明白
int x=n
(n+1)/2 -sum;
System.out.println(x)也就很容易理解了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值