3.21 贝壳服务端笔试

A了2 3 第一题没看出来是动态规划 结束后做出来了
第一题 对于dp[j] 意为0~j这一段字串最大的得分,通过最大的dp[i]+score(i+1,j)获得,其中i=0~j-1,score(i+1,j)为i+1~j这段字串的得分
import java.util.ArrayList;
import java.util.Scanner;

public class Beike_01 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        in.nextLine();
        String s=in.nextLine();
        System.out.println(maxScore(s));
    }
    public static int maxScore(String s){
        int[] dp=new int[s.length()];
        dp[0]=-1;
        for(int i=1;i<s.length();i++){
            dp[i]=score(s.substring(0,i+1));
            for(int j=0;j<i;j++){
                dp[i]=Math.max(dp[i],dp[j]+score(s.substring(j+1,i+1)));
            }
        }
        return dp[s.length()-1];
    }
    public static int score(String s){
        int[] cnt=new int[26];
        for(int i=0;i<s.length();i++){
            int index=s.charAt(i)-'a';
            cnt[index]++;
        }
        int score=0;
        for(int i=0;i<26;i++){
            if(cnt[i]==0) continue;
            if(cnt[i]%2==0) score++;
            else score--;
        }
        return score;
    }
}
第二题 我用暴力会超时 所以维护了一个动态数组来记录各位和 注意输入是有界的 所以多写几个判断就好了
import java.util.Scanner;

public class Beike_02 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (int i = 0; i < t; i++) {
            int l = in.nextInt();
            int r = in.nextInt();
            System.out.println(numOfModNum(l, r));
        }
    }

    public static int numOfModNum(int l, int r) {
        int[] bitI = new int[6];
        int j = 0;
        int tmp = l;
        l--;
        while (l > 0) {
            for (int i = 0; i <= j; i++) bitI[i] += l % 10;
            l /= 10;
            j++;
        }
        l = tmp;
        int ret = 0;
        for (int i = l; i <= r; i++) {
            if (i == 1000000) continue;
            if (i % 100000 == 0) {
                bitI[5]++;
                for (int k = 0; k < 5; k++) bitI[k] = bitI[5];
            } else if (i % 10000 == 0) {
                bitI[4]++;
                for (int k = 0; k < 4; k++) bitI[k] = bitI[4];
            } else if (i % 1000 == 0) {
                bitI[3]++;
                for (int k = 0; k < 3; k++) bitI[k] = bitI[3];
            } else if (i % 100 == 0) {
                bitI[2]++;
                for (int k = 0; k < 2; k++) bitI[k] = bitI[2];
            } else if (i % 10 == 0) {
                bitI[1]++;
                for (int k = 0; k < 1; k++) bitI[k] = bitI[1];
            } else bitI[0]++;
            if (i % bitI[0] == 1) ret++;


        }
        return ret;

    }

}
第三题 BFS 和普通的BFS的区别在于只有两个方向而且需要区别以下,但是不用标记是否访问过了
import java.util.Arrays;
import java.util.Scanner;

public class Beike_03 {
    static int stringSum = 0;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine();
        String s = in.nextLine();
        String[] ans = new String[n];
        for (int i = 0; i < n; i++) ans[i] = in.nextLine();
        char[][] board = new char[n][n];
        for (int i = 0; i < n; i++) {
            board[i] = ans[i].toCharArray();
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                dfs(n, i, j, 0, s, board, true);
                dfs(n, i, j, 0, s, board, false);
            }
        }
        System.out.println(stringSum);
    }

    public static void dfs(int n, int i, int j, int index, String s, char[][] board, boolean direct) {
        if (index == s.length()) {
            stringSum++;
            return;
        }
        if (i < 0 || i >= n || j < 0 || j >= n) return;
        char c = s.charAt(index);
        if (board[i][j] != c) return;
        if (direct) dfs(n, i, j + 1, index + 1, s, board, direct);
        else dfs(n, i + 1, j, index + 1, s, board, direct);
    }

}


#贝壳找房实习生招聘##贝壳找房##笔经#
全部评论
楼主 现在收到了嘛
点赞 回复 分享
发布于 2022-03-25 00:48
楼主收到面试通知了吗求问
点赞 回复 分享
发布于 2022-03-22 19:39

相关推荐

09-17 17:33
门头沟学院 Java
阿里面试一直在聊天是不是就是kpi了
offer收割机jo...:应该不是KPI,因为好多人阿里简历都过不去
我的秋招日记
点赞 评论 收藏
分享
Aurora23:属于挂一半,暂时进池子了,隔一段时间没有其他组捞的话就彻底结束了
点赞 评论 收藏
分享
真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

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