招商银行信用卡中心实习生招聘(第二批)题解

1、有0,1,2,3...n    n+1个序列,有n个数,找出没在序列中出现的数。

如  输入3   3   0    1   输出2    第一个数表示有n个数,301表示要查的数

思路:【1】将这个数组排序,判断a[i]=i是否成立,不成立的即输出i

【2】在数组存储的时候,a[sc.nextInt()]=1,然后在0-n判断a[i]是否为1   不为1的即为没出现的。

 1 package zhenti;
 2 /** 
 3  * @author zlz099
 4  * @date 创建时间:2018年4月10日 下午5:19:04 
 5  */
 6 import java.util.*;
 7 public class Main {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11 //        Scanner scanner = new Scanner(System.in);
12 //        int n = scanner.nextInt();
13 //        int[] a = new int[n];
14 //        int[] b = new int[n];
15 //        ArrayList<Integer> arrayList = new ArrayList<>();
16 //        TreeSet<Integer> t = new TreeSet<>();
17 //        for(int i = 0; i < n;i++){
18 //            a[i] = scanner.nextInt();
19 //            t.add(a[i]);
20 //        }
21 //        Iterator<Integer> iterator = t.iterator();
22 //        while(iterator.hasNext()){
23 //            arrayList.add(iterator.next());
24 //        }
25 //        for(int i = 0; i < arrayList.size();i++){
26 //            //System.out.println(arrayList.get(i));
27 //            if(arrayList.get(i)!=i){
28 //                System.out.println(i);
29 //            }
30 //        }
31 //    }
32         Scanner sc = new Scanner(System.in);
33         int n = sc.nextInt();
34         int[] a = new int[n+1];
35         for(int i = 0; i < n; i++){
36             a[sc.nextInt()]=1;
37         }
38         for(int i = 0; i < n; i++){
39             if(a[i]!=1){
40                 System.out.println(i);
41             }
42         }
43     }
44 }

2、小猫跳数轴,有三种走法,

(1)正向走一步记为n+1

(2)负向走一步记为n-1

(3)跳当前的2倍记为n*2

输入x,输出跳到x需要的最小步数

 

思路:可用动态规划,跟跳台阶是一个思路

边界判断,0为0步   1为1步

n是偶数,则为f(n/2)+1

n为奇数,则为f(n-1)+1

n为负数,则为f(Math.abs(n))

 1 package zhenti;
 2 /** 
 3  * @author zlz099
 4  * @date 创建时间:2018年4月10日 下午7:47:06 
 5  */
 6 import java.util.*;
 7 
 8 import edu.princeton.cs.algs4.In;
 9 public class Jump {
10 
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13         Scanner scanner = new Scanner(System.in);
14         int n = scanner.nextInt();
15         System.out.println(jump(n));
16     }
17     public static int jump(int n){
18         if(n == 0) return 0;
19         else if(n == 1 || n == -1) return 1;
20         if(n<0){return jump(Math.abs(n));}
21         if(n%2==0){return jump(n/2)+1;}
22         else {
23             return jump(n-1)+1;
24         }    
25     }
26 }

3、剑指offer上的原题,丑数

质因子为2,3,5的数

第一种方法时间复杂度超时了,过了80%

package zhenti;

/** 
 * @author zlz099
 * @date 创建时间:2018年4月10日 下午8:02:02 
 */
import java.util.*;
public class Choushu {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(choushu(n));
    }
//    public static boolean choushu(int n){
//        while(n%2==0)
//            n/=2;
//        while(n%3==0)
//            n/=3;
//        while(n%5==0)
//            n/=5;
//        return(n == 1)? true:false;
//    }
//    public static int getChoushu(int index){
//        if(index<0){return 0;}
//        int num = 0;
//        int uglyfound = 0;
//        while(uglyfound<index){
//            num++;
//            if(choushu(num)){
//                ++uglyfound;
//            }
//        }
//        return num;
//    }


    public static int choushu(int index){
        if(index<0){return 0;}
        int[] uglyarray = new int[index];
        uglyarray[0] = 1;
        int m2 = 0;
        int m3 = 0;
        int m5 = 0;
        for(int i = 1; i < index;i++){
            int min = min(uglyarray[m2]*2,uglyarray[m3]*3,uglyarray[m5]*5);
            uglyarray[i] = min;
            while(uglyarray[m2]*2 == uglyarray[i])
                m2++;
            while(uglyarray[m3]*3 == uglyarray[i])
                m3++;
            while(uglyarray[m5]*5 == uglyarray[i])
                m5++;
        }
        return uglyarray[index-1];
    }
    public static  int min(int n1,int n2,int n3){
        int min = (n1<n2)?n1:n2;
        return min<n3?min:n3;
    }
}

 

posted @ 2018-04-10 22:16  zlz099  阅读(261)  评论(0编辑  收藏  举报