2021-04-11 度小满金融 笔试

时间:2021-04-11 16:00-17:30 (90min)
题型:
一。选择题(25道)60分
大多数是考察的是图的题目

二。编程题(2道)40分
1. 100%
开关电灯
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小A在宾馆打工。一日,小A需要把宾馆一个走廊上n个灯全部关掉。走廊上的灯编号为1~n。宾馆的电路有设计缺陷。宾馆的走廊上有n个开关,第i个开关只可以改变i~n号电灯的状态,即亮的熄灭,熄灭的变亮。 小A一秒按一次开关,一共按了m次。给出小A每次按下的开关编号,请问每一盏灯第一次关掉的时间。一开始,所有灯都是亮着的。
输入描述
输入第一行包含两个数,n,m 接下来一行m个数,代表小A每次按下的开关编号
(n,m≤100000,最后一次按下的开关一定是1号开关。)
输出描述
输出一行n个数,代表每盏电灯最后关掉的时间。
样例输入
4 2
2 1
样例输出
2 1 1 1

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] nm = sc.nextLine().split("\\s+");
        int n = Integer.parseInt(nm[0]);//灯数
        int m = Integer.parseInt(nm[1]);//按下的开关数
        String[] mNum = sc.nextLine().split("\\s+");//每次开关
        int[] k = new int[n];//初始化一个灯的数组
        int count = 1;//次数
        for (String i : mNum) {//模拟开关并记录
            for (int j = Integer.parseInt(i) - 1; j < n; j++) {
                if (k[j] == 0) {
                    k[j] = count;
                }
            }
            count++;
        }
        for (int i : k) {
            System.out.print(i + " ");
        }
    }
}


2. 值有45%的通过了(另外复杂度也比较高),求大佬指教!!
消消乐
时间限制: 3000MS
内存限制: 589824KB
题目描述:
给定一个长度为n的字符串,每个位置表示一种颜色。你有一次机会可以消掉一堆颜色相同并且连续的序列,并且得到这个序列的长度的得分。比如对于字符串aaabbccccc,你可以消掉aaa,可以得到3分,你也可以消掉cccc,得到4分。现在你有k次作弊的机会,每次作弊可以改变字符串中任意一个位置的颜色,比如aaabaac,你可以把第四个位置的b改成a,这样就能从1消到6,当然你也可以不改变任意位置。现在你需要输出最大的得分。
为了方便,每种颜色我们用小写的字母来表示,也就是至多有26种颜色。
输入描述
第一行一个整数n表示字符串的长度和一个整数k表示作弊的次数。(1≤k≤n≤1e6)
第二行一个长度为n并且只包含小写字母的字符串。
输出描述
最大的得分。
样例输入
5 1
aaaba
样例输出
5
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] nk = sc.nextLine().split("\\s+");
        int n = Integer.parseInt(nk[0]);//字符串长度
        int k = Integer.parseInt(nk[1]);//作弊次数
        String s = sc.nextLine();
        int score = 0;//最终得分
        for (int i = 0; i < n - 1; i++) {
            String str = s;
            int scoreTmp = 1;//临时得分
            int K = 0;//作弊次数
            int tmp = i + 1;//记录未作弊位置时候的最大
            for (int j = i + 1; j < n; j++) {
                if (str.charAt(i) == str.charAt(j)) {
                    scoreTmp++;
                } else if (K < k) {//还能作弊
                    if (tmp == i + 1) {
                        tmp++;
                    }
                    K++;
                    str = str.replaceFirst(str.charAt(j) + "", str.charAt(i) + "");
                    scoreTmp++;
                } else {
                    break;
                }
            }
            if (score < scoreTmp) {
                score = scoreTmp;
            }
            i = tmp;
        }
        System.out.println(score);
    }
}



#Java工程师##笔经#
全部评论
太强了
点赞 回复 分享
发布于 2021-04-11 17:46
为啥前端一道算法都没有,有的题直接给了答案,我是做了假的题嘛????
点赞 回复 分享
发布于 2021-04-11 17:48
到底是第一次关掉还是最后一次关掉的时间😪
点赞 回复 分享
发布于 2021-04-11 18:00
过了部分样例有分吗
点赞 回复 分享
发布于 2021-04-11 18:13
第二题leetcode 424
点赞 回复 分享
发布于 2021-04-11 21:24

相关推荐

评论
4
8
分享
牛客网
牛客企业服务