58同城笔试0920

群友写出来几道,真的废了签到两道都没a出来

第一道 30%

package com.面试中的算法;

import java.util.ArrayList;
import java.util.List;

/**
 * @author
 * @version 1.0
 * @description: TODO
 * @date 2024/9/20 19:45
 */
public class Main {
    public static int[][] findIntersection (int[][] firstList, int[][] secondList) {
        List<int[]> ans=new ArrayList<>();
        int i=0,j=0;
        while(i<firstList.length&&j<secondList.length){
            int[] firtst=firstList[i];
            int[] seconds=secondList[j];
            if(firtst[1]>=seconds[0]&&seconds[1]>=firtst[0]){
                int start=Math.max(firtst[0],seconds[0]);
                int end=Math.max(firtst[1],seconds[1]);
                ans.add(new int[]{start,end});
                if(firtst[1]<seconds[1]){
                    i++;
                }else{
                    j++;
                }
            }else if(firtst[0]>seconds[1]){
                j++;
            }else {
                i++;
            }
        }
        int size=ans.size();
        int[][] res=new int[size][2];
        for (int k = 0; k < size; k++) {
            res[k]=ans.get(k);
        }
        return  res;

        // write code here
    }

    public static void main(String[] args) {
        findIntersection(new int[][]{{1,2},{3,4}},new int[][]{{2,3}});
    }
}


第二道10%

package com.面试中的算法;

/**
 * @author
 * @version 1.0
 * @description: TODO
 * @date 2024/9/20 20:13
 */
public class Mian2 {
    public static int StringSplit (String str) {
        int maxScore = 0;
        int countA = 0, countB = 0;
        for (char c : str.toCharArray()) {
            if (c == 'a') {
                countA++;
            }
        }
        for (int i = 1; i < str.length(); i++) {
            if (str.charAt(i - 1) == 'a') {
                countA--;
            }
            int score = countA + (str.length() - i - (str.substring(i).indexOf('b') == -1 ? 0 : 1) + str.substring(0, i).indexOf('b') == -1 ? 0 : 1);
            int countRight = 0;
            for (int j = i; j < str.length(); j++) {
                if (str.charAt(j) == 'b') {
                    countRight++;
                }
                score = countRight + countA;
                maxScore = Math.max(maxScore, score);

            }


        }
        return maxScore;
    }

}


第三道 ac

package com.面试中的算法;

/**
 * @author
 * @version 1.0
 * @description: TODO
 * @date 2024/9/20 19:58
 */
public class Main3 {
    private static final int MOD = 1000000007;

    public int numberOfWays (int startPos, int endPos, int k) {
        int max=Math.max(startPos,endPos)+k;
        int min=Math.min(startPos,endPos)-k;
        int[][] dp=new int[k+1][max-min+1];
        dp[0][startPos-min]=1;
        for(int i=1;i<=k;i++){
            for(int j=0;j<=max-min;j++){
                int pot=j+min;
                dp[i][j]=0;
                if(j>0){
                    dp[i][j]=(dp[i][j]+dp[i-1][j-1])%MOD;
                }
                if(j<max-min) dp[i][j]=(dp[i][j]+dp[i-1][j+1])%MOD;
            }
        }
        return dp[k][endPos-min];
        // write code here
    }
}


#你都收到了哪些公司的感谢信?#
全部评论
a了2.18,感觉比其他厂稍微简单点
1 回复 分享
发布于 09-21 22:41 陕西
佬!!!
点赞 回复 分享
发布于 09-20 20:58 上海
第二题我直接枚举右字符串的起始位置竟然过了
点赞 回复 分享
发布于 09-20 21:02 湖南
第三道做的差不多,我用过两个一维dp,维护新的和旧的状态。我的dp长度取值是abs(start-end)+1+2k,结果只能过58,用的python
点赞 回复 分享
发布于 09-20 21:09 北京
第二题可以用前缀和 维护a和b的前缀和 然后遍历一遍就可以了
点赞 回复 分享
发布于 09-21 15:06 江西
2.5吧,第一道直接判断,然后合并区间就过了。第二道前缀和和后缀和,python直接调库s.count('a')过了,但是前后缀数组死活a不了。第三道没有想到用dp,感觉是个数学问题,但是最后就过了0.5。 感觉代码题不难,但是算法岗的选择题真的和算法没啥关系,难受住了。
点赞 回复 分享
发布于 09-21 17:27 湖北
挺简单的,a了三道
点赞 回复 分享
发布于 09-21 19:36 浙江
难的题目你过了,签到题你倒是没过😂
点赞 回复 分享
发布于 09-22 10:13 江西

相关推荐

3 1 评论
分享
牛客网
牛客企业服务