8月23日腾讯后台笔试

第一题

输入n表示数组长度,输入k表示删除数组第k个元素,输入n个数表示数组,要求输出删后的数组。(原题是链表)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            if(i == k-1) {
                int tem = scanner.nextInt();
                continue;
            }
            sb.append(scanner.nextInt()).append(" ");
        }
        System.out.println(sb.toString().trim());
    }
}

第二题

找字典序第k小的子串。因为k<=5,所以从头遍历即可。

import java.util.Scanner;

// 100%
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        int k = scanner.nextInt();
        // 按字典序增加寻找
        // 找到了就加a,找不到就重新开始加
        String find = "a";
        int got = 0 ;

        while(true){
            int index = s.indexOf(find);
            while(index != -1){
                got ++;
                if(got == k)
                    break;
                find += 'a';
                index = s.indexOf(find);
            }
            if(got == k)
                break;
            find = lastAlphabetPlusOne(find);
        }
        System.out.println(find);

    }
    // 如果az都没有,那么就该b了吧
    private static String lastAlphabetPlusOne(String s){
        int length = s.length();
        if(s.endsWith("z"))
            return s.substring(0,length-2) + (
                    ((char)(s.charAt(length-2)+1))
                    );
        return s.substring(0, length -1) + ((char)(s.charAt(length -1)+1));
    }
}

第三题

把n拆成俩数,使俩数的每一位和加起来最大。注意n会超过int。使用long

import java.util.Scanner;
// 100%
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int times = scanner.nextInt();
        for (int i = 0; i < times; i++) {
            long n = scanner.nextLong();
            int nines = String.valueOf(n).length()-1;
            long va1 = make9(nines);
            long va2 = n - va1;
            System.out.println(a(va1) + a(va2));
        }
    }

    private static long make9(int nines) {
        long res = 0;
        while(nines-->0) {
            res *=10;
            res += 9;
        }
        return res;
    }

    private static int a (long n){
        String s = Long.toString(n);
        int sum =0;
        for (char c: s.toCharArray()){
            sum += (c-48);
        }
        return sum;
    }
}

第四题

有n条板子长短不一,可以选择竖着一次刷一条板,也可以选择横着一次刷所有,但是如果中间断了就算刷两次。比如3 0 3横着刷,刷剩下2 0 2 这需要刷两次完成,因为中间断了。
给你板子长度,问最少多少次刷完。
没做出来

第五题

给你一个串,和n次测试,每次测试给两个数字a和b:
串从a到b的子串,最少可以分成多少个回文串。
比如 ababa,查1,4
得到abab,拆成aba和b两个回文,结果2。
暴力10%,没做出来。

#笔试题目##腾讯#
全部评论
题解写挺快啊
1 回复 分享
发布于 2020-08-23 22:02
第五题lc131和132中间版,首先定义个bool的dp二维数组来判断dp[i...j]的字串是不是回文串。然后他给你i到j,直接暴力枚举/回溯调用dp[i...j]里面的每个值来求min(ans, currAns).比如给你i = 1, j = 5。那你先看一刀不砍dp[1][5]是不是回文串,再看砍1刀的,砍2刀的,砍3刀的,同时更新最小值
1 回复 分享
发布于 2020-08-24 11:50
我测试选错测开 硬着头皮做
点赞 回复 分享
发布于 2020-08-23 22:02
求大佬指导一下第4题😥
点赞 回复 分享
发布于 2020-08-23 22:02
第二题是什么意思啊
点赞 回复 分享
发布于 2020-08-23 22:03
第五题好像leetcode上的,感觉优点像
点赞 回复 分享
发布于 2020-08-23 22:03
第五题就是用区间dp预处理答案就行 第四题就是瞎逼递归。。。过了百分95
点赞 回复 分享
发布于 2020-08-23 22:05
第五题魔改一下Leetcode 132就行
点赞 回复 分享
发布于 2020-08-23 22:06

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
评论
2
9
分享
牛客网
牛客企业服务