2018-08-11網(wǎng)易互聯(lián)網(wǎng)筆試

1.高數(shù)課打瞌睡,總共n分鐘,喚醒持續(xù)k分鐘,求最大收益
利用滑動(dòng)窗口尋找最大收益喚醒區(qū)間

public class Doze {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] score = new int[n];
        int[] listen = new int[n];
        int res=0;
        for (int i = 0;i < n;i ++){
            score[i] = sc.nextInt();
        }
        for (int i = 0;i < n;i ++){
            listen[i] = sc.nextInt();
        }
        res = helper(score,listen,n,k);
        System.out.println(res);
    }
    
    public static int helper(int[] score,int[] listen,int n,int k) {
        int res=0;
        int improve = 0;
        int low=0;
        int high=0;
        int temp=0;
        for (int i = 0; i < n; i++) {
            if(listen[i]==1)
                res +=score[i];
        }
        for (int i = 0; i < k; i++) {
            if(listen[i]==0)
                temp +=score[i];
            high=i;
        }
        improve=Math.max(improve, temp);
        while (high<n-1) {
            low++;
            high++;
            if(listen[high]==0)temp+=score[high];
            if(listen[low-1]==0)temp-=score[low-1];
            improve=Math.max(improve, temp);
        }
        return res+improve;
    }
    
}

2.從左到右有n堆蘋果,給一個(gè)數(shù)字qi;判斷第qi個(gè)蘋果在第幾堆
利用TreeMap記錄蘋果堆數(shù)量上限,直接獲取qi的位置

public class Apple {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {//注意while處理多個(gè)case
            int n = in.nextInt();
            int last = 0;
            TreeMap<Integer,Integer> map = new TreeMap<>();
            for(int i = 0;i<n;i++){
                last = last+in.nextInt();
                map.put(last, i+1);
            }
            int m = in.nextInt();
            for(int i = 0;i<m;i++){
                int qi = in.nextInt(); 
                if(map.ceilingKey(qi)==null) {
                    System.out.println(-1);
                    break;
                }       
                System.out.println(map.get(map.ceilingKey(qi)));
            }
        }
        in.close();
    }
    
}

3.由n個(gè)a,m個(gè)z組成的字符串按字典序排序,輸出第k個(gè)字符串

public class aazz{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {//注意while處理多個(gè)case
            int n = in.nextInt();
            int m = in.nextInt();
            int k = in.nextInt();
            double max = getMax(n, m);
            if(k>max){
                System.out.println(-1);
            }else {
                helper(n,m,k);
                System.out.println();
            }
        }
    }
    static void helper(int n,int m,int k){
        if(n == 0 && m == 0){
            return;
        }
        if(n == 0){//a已用完,后面全是z
            for(int i = 0;i<m;i++){
                System.out.print("z");
            }
            return;
        }else if (m == 0) {//z已用完,后面全是a
            for(int i = 0;i<n;i++){
                System.out.print("a");
            }
            return;
        }
        double max = getMax(n-1, m);
        if(max>=k){//n-1個(gè)a和m個(gè)z可以有k種以上可能的字符串,說(shuō)明a開頭
            System.out.print("a");
            helper(n-1, m, k);
        }else {
            System.out.print("z");
            helper(n, m-1, (int)Math.round(k-max));
        }
    }
        //(n+m)!/n!*m!(字符串總數(shù))
    static double getMax(int n,int m){
        double max = 1;
        for(int i = 0;i<n;i++){
            max *= (m+n-i);
        }
        for(int i = 0;i<n;i++){
            max /= i+1;
        }
        return max;
    }
}
//方法二
public class StringDp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        int[][] dp = new int[n+1][m+1];
        dp[0][0] = 1;   // 重要
        for (int i = 1; i <= n; i++) {
            dp[i][0] = 1;
        }
        for (int i = 1; i <= m; i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i <= n ; i++) {
            for (int j = 1; j <=  m; j++) {
                dp[i][j] = dp[i-1][j] + dp[i][j-1];
            }
        }
        StringBuffer sb = new StringBuffer();
        if (k > dp[n][m]) {
            System.out.println(-1);
        } else {
            int len = n + m;
            for (int i = 0; i < len; i++) {
                if (n > 0 && k <= dp[n-1][m]) {
                    sb.append("a");
                    n--;
                } else {
                    if (n > 0) {
                        k -= dp[n-1][m];
                    }
                    sb.append("z");
                    m--;
                }
            }
            System.out.println(sb.toString());
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容