9.14 依图笔试面经 - 编程题 & 题解

alt

考试时间:2023-09-14(100 分钟)

考试平台: 牛客网

T1

牛牛正在买书,每本书都有名字和价格,牛牛想把书按照价格升序排序。

输入描述

第一行输入一个正整数 n,表示书的数量

后续每行都输入一个字符串 str 和一个正整 p表示书价格。

输出描述

把书名按照价格升序输出。

示例1

输入:
3
TheNowcoder 100
Abook 20
BBook 300

输出:
Abook
TheNowcoder
BBook

题解

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

// P1
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        TreeMap<Integer, String> map = new TreeMap<>();
        for (int i = 0; i < n; i++) {
            String bookName = in.next();
            Integer price = in.nextInt();
            map.put(price, bookName);
        }

        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println(entry.getValue());
        }
    }
}

T2

从前有一扇秘密大门,打开大门的口令记录在一个数组中,为了破解其中的奥秘,需要找出数组内重复次数第二多的小写字母及其出现的次数。

输入描述

输入一个任意长度的字符串数组

输出描述

输出数组内重复次数第二多的小写字母及其频次,输出形式为:字符-频次

示例

输入:
['abaabbbabbddddfew1','abbbAAwe123','45dipopg#$@']

输出:
a-5
输入:
['qwe','qwe','qwe']

输出:
ERROR

题解

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

// P2
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Map<Character, Integer> cntMap = new HashMap<>();
        while (in.hasNext()) {
            String next = in.next();
            for (char c : next.toCharArray()) {
                cntMap.put(c, cntMap.getOrDefault(c, 0) + 1);
            }
        }

        char c = '_';
        // max1 次数最多, max2 次数第二多
        int max1 = 0, max2 = 0;
        for (Map.Entry<Character, Integer> entry : cntMap.entrySet()) {
            int cnt = entry.getValue();
            if (cnt >= max1) {
                max2 = max1;
                max1 = cnt;
                c = entry.getKey();
            } else if (cnt > max2) {
                max2 = cnt;
            }
        }

        if (max1 != max2) {
            System.out.println(String.format("%c-%d", c, max1));
        } else {
            System.out.println("ERROR");
        }
    }
}

T3

小明是一个有强迫症的小孩,有一天他看到一个n”m的矩阵,但是强迫症让他失去理智,他想要删掉矩阵的一些列使得最终的矩阵每一行都是一个非递减序列。

换句话说,如果最终的矩第 i 行第 j 列为 a[i][j], 那么对于所有的i, j ( 1≤ i ≤ n, 1 ≤ j ≤ m-1) , a[i][j] ≤ a[i][j+1] 。

现在小明想知道他最少删除多少列能使得最终的矩阵每一行都是一个非递减序列。

输入描述

第1行: 输入两个正整数n,m,(1 ≤ n,m ≤300)。

第2~n+1行: 每行输入m个正整数,第i+1行第 j 个正整数,表示题目中的a[i][j],(1 ≤ a[i][j] ≤ 10^9)。

输出描

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

🔥笔试编程真题宝典💯 文章被收录于专栏

📕分享大厂机试真题深度剖析核心考点,助你速通面试。

全部评论
大佬,太强了,我只会前俩模拟
点赞 回复
分享
发布于 2023-09-15 10:33 陕西
前三道题加起来50多分,第四题0分,做完一直没消息,这些题跟一星期前笔试的一模一样
点赞 回复
分享
发布于 2023-09-16 17:43 安徽
联想
校招火热招聘中
官网直投
第四题能a?
点赞 回复
分享
发布于 2023-09-21 01:00 浙江
楼主,现在是什么状态
点赞 回复
分享
发布于 2023-11-01 19:30 河北
这真的是一个半小时内做出来的吗
点赞 回复
分享
发布于 2023-12-28 13:12 美国

相关推荐

6 17 评论
分享
牛客网
牛客企业服务