首页 > 微众银行Java笔试
头像
halahy
编辑于 2021-05-13 21:59
+ 关注

微众银行Java笔试

20道选择,3道算法。
1.征服山顶
传入一个数组,每个位置代表山的高度。
当你爬上山,周围没有比你高的山,你的征服感就加一。
解法:
遍历两次。
第一次遍历找出最高的山。
第二次遍历,每碰到跟最高山相等的山,征服感就加一。
package webank;

import java.util.Scanner;

class Solution{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[]h = new int[n];
        for(int i = 0;i<n;i++){
            h[i] = input.nextInt();
        }
        System.out.println(calculateHappy(h));
        input.close();
    }
    public static int calculateHappy(int[]h){
        int res = 0;
        int max = 0;
        for(int i = 0;i<h.length;i++){
            if(h[i]>max){
                max = h[i];
            }
        }
        for(int i = 0;i<h.length;i++){
            if(h[i]==max){
                res++;
            }
        }

        return res;
    }


}


2.积水
你有n个蓄水池,蓄水池还有m个通道。求下雨后的蓄水池。
这题主要是输入输出耗费了比较多的时间。
而且我感觉我的解法也不好。
运用了大量的集合来做。求大神指点。
package webank;

import java.util.*;

public class Main2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String s1 = input.nextLine();
        String ss1[] = s1.split(" ");
        int n = Integer.parseInt(ss1[0]);
        int m = Integer.parseInt(ss1[1]);
        float []p = new float[n];
        String s2 = input.nextLine();
        String ss2[] = s2.split(" ");
        for(int i = 0;i<n;i++){
            p[i] = Integer.parseInt(ss2[i]);
        }
        List<Set<Integer>>  list = new ArrayList<>();
        for(int i = 0;i<m;i++){
            String s3 = input.nextLine();
            String ss3[] = s3.split(" ");
            int t1 = Integer.parseInt(ss3[0])-1;
            int t2 = Integer.parseInt(ss3[1])-1;
            if(i==0){
                Set<Integer> set0= new HashSet<>();
                set0.add(t1);
                set0.add(t2);
                list.add(set0);
            }
            for(Set<Integer> set:list){
                if(set.contains(t1)||set.contains(t2)){
                    set.add(t1);
                    set.add(t2);
                }else{
                    Set<Integer> sett= new HashSet<>();
                    sett.add(t1);
                    sett.add(t2);
                    list.add(sett);
                    break;
                }
            }
        }
        for(Set<Integer> set:list){
            List<Integer>l = new ArrayList<>();
            float temp = 0;
            for(int i:set){
                l.add(i);
                temp+=p[i];
            }
            temp = temp/l.size();
            temp = Math.round(temp*100);
            temp = temp/100;
            for(int i = 0;i<l.size();i++){
                p[l.get(i)] = temp;
            }
        }
        System.out.println(p);
    }
}

3.拼积木
在第二题耗费了太多时间。。
我记得我之前在别人那边见过,不过没写,没想到又出现了。。。。


总结:1.两道题目应该能写出来,不过第二题的Math.round()的处理方法不好,导致最后结果没有通过。其实也是因为自己解法不好,耗费了大量时间。
2.其他家的真题也要好好把握,可能会出现重复。
3.有背景的题目,读懂题目,写好输入输出是关键。


全部评论

(8) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐