第一题:我猜是贪心,分别统计每个数字的最大值,然后统计每个频次出现的数字数目,然后分别从最大值开始贪心,最后写的,没时间了当前值的频次a     小于等于频次a的所有的数字总数为 m     频次大于a的数字个数(不是总数)为b    如果 a + m + b*a >=k ,那么当前数就是最大的众数import java.util.*;public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int t = in.nextInt();in.nextLine();        int[] res = new int[t];        for(int i = 0;i<t;i++){            int n = in.nextInt(),k = in.nextInt();in.nextLine();            int[] a = new int[n];            Map<Integer,Integer> map = new HashMap<>();            for(int j=0;j<n;j++){                a[j] = in.nextInt();                map.put(a[j],map.getOrDefault(a[j],0)+1);            }            Map<Integer,Integer> map2 = new HashMap<>();            for(Map.Entry<Integer,Integer> e:map.entrySet()){                map2.put(e.getKey(),map2.getOrDefault(e.getKey(),0)+1);            }            Arrays.sort(a);            int cnt = 0;            int mx;            for(int j=n-1;j>=0;j--){                int times = map.get(a[j]);                int c = times;                for(int z=1;z<=times;z++){                    if(map2.get(z)!=null){                        c+=map2.get(z);                        if(c>=k){                            res[i]=a[j];                            break;                        }                    }                }                if(res[i]!=0){                    break;                }                j-=times-1;            }        }        for(int i=0;i<t;i++){            System.out.println(res[i]);        }    }}第二题:数论?(菜鸟不懂是哪个类别的)就是如果当前的x>n ,那么在n位置就是x%n的值,所以需要一次取余在[x+1,... ]位置就是 x 的值,因为x对于一个大于x的值取余为x,这里右界看一下就好了,不好写,因为n的值不定(所以有一个特判)在[1,x] 的左侧就是0,因为x一旦到了x的位置取余之后一直是0但是这题需要看一下边界,就是 k<=x+1(被边界卡了不少时间)import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int t = in.nextInt();in.nextLine();        int[] res = new int[t];        for(int i = 0;i<t;i++){            int n = in.nextInt(),x = in.nextInt(),k = in.nextInt();            if(k==n+1){                // System.out.println("special");                res[i] = x; // 特判            }            else{                x = x%n; // 第 n 项                if(k<=x+1){                    // System.out.println("left");                    res[i] = 0; // 如果查询在 x 的左侧,取余结果为0                }                else{                    // System.out.println("right");                    res[i] = x; // 如果查询在 x 右侧,得到 x                 }            }        }        for(int i=0;i<t;i++){            System.out.println(res[i]);        }    }}这题没看懂,应该是并查集,如果两个端点祖先相同,输出yes,否则no然后看了示例感觉好像可以构成多个那个不知道什么名字的玩意儿那么需要确定之前出现的边有没有构成环,我就用一个map记录每次构成环的时候的祖先节点,    如果一个无环的域和成环的域连接了,需要将无环域的原本祖先也记录进去,否则无环域的非祖先节点没有当前域已经承欢的信息    但是最后也不行    这题调了快半个小时,绝望了import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main {    public static void main(String[] args) {        class Union{            int[] fa;            public Union(int n){                fa = new int[n+1];                for(int i = 0;i<n+1;i++){                    fa[i] = i;                }            }            public int find(int u){                if(fa[u] == u){                    return u;                }                int f = find(fa[u]);                fa[u] = f; // 变胖                return f;            }            public boolean isU(int u,int v){                if(find(u)==find(v)){                    return true;                }                return false;            }            public void u(int u,int v){                int uu = find(u),vv = find(v);                fa[uu] =vv;            }            public void print(){                for(int i=0;i<fa.length+1;i++){                    System.out.println(i+ " de fa is "+ fa[i]);                }            }        }        Scanner in = new Scanner(System.in);        int n = in.nextInt(), m = in.nextInt();in.nextLine();        boolean sign = true;        Union union = new Union(n);        boolean[] res = new boolean[n];        Map<Integer,Boolean> map = new HashMap<>();        for(int i = 0;i<n+1;i++){            map.put(i,false);        }        // union.print();        for(int i=0;i<m;i++){            int u=in.nextInt(),v = in.nextInt();in.nextLine();            int uf = union.find(u);            int uv = union.find(v);            if(map.get(uf) || map.get(uv) ){                res[i] = false;                if(!map.get(uf)){ // 顺序不能错                    union.u(u,v);                    map.put(uf,true);                }else if (!map.get(uv)){                    union.u(v,u);                    map.put(uv,true);                }                continue;            }            if(union.isU(u,v)){                // System.out.println(i+ "  "+" true");                map.put(union.find(u),true);                res[i] = true;            }            else{                // System.out.println(i+ "  "+" false ");                res[i] = false;                union.u(u,v);            }        }        // union.print();        for(int i = 0;i<n;i++){            System.out.println(res[i]?"Yes":"No");        }    }}总得分0+1+0.03,哎😔一开始忘记了笔试,中途开始写,太慌了,而且不给用IDEA,好难调代码啊
点赞 9
评论 5
全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
想进开水团喝开水:哦 给我一个 就算你真拿到牛友也会为你开心的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务