0917滴滴JAVA开发笔试代码(1.82/2)

第一题代码(0.82)

只过了0.82,有大佬可以帮忙看看吗
package 滴滴;

import java.math.BigInteger;
import java.util.Scanner;

public class Q1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        String ans[] = new String[1];
        dfs(str,sb,0, ans);
        System.out.println(ans[0]);
    }

    public static void dfs(String str, StringBuilder sb, int idx, String[] ans) {
        if(idx>=str.length()) {
            BigInteger bigInteger = new BigInteger(sb.toString());
            if(bigInteger.mod(new BigInteger("3")).intValue()==0) {
                ans[0] = sb.toString();
            }
            return;
        }
        if(str.charAt(idx)!='?') {
            sb.append(str.charAt(idx));
            dfs(str,sb,idx+1, ans);
            sb.deleteCharAt(sb.length()-1);
        }
        else {
            for (int i = 0; i < 10 && ans[0]==null; i++) {
                if(i==0 && idx==0) continue;//不能有前导0
                //判断和前一个是否相等
                if(idx-1>=0 && (sb.charAt(idx-1)-'0')==i) {
                    continue;
                }
                //判断和后一个是否相等
                if(idx+1<str.length() && (str.charAt(idx+1)!='?') && (str.charAt(idx+1)-'0')==i) {
                    continue;
                }
                sb.append((char)('0'+i));
                dfs(str, sb, idx+1, ans);
                sb.deleteCharAt(sb.length()-1);
            }
        }
    }
}

第二题代码(ac)

package 滴滴;

import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeSet;
/*
5 2 1
1 1 3 6 10
12 3 5 12 15
1 2 1 2 1
 */
public class Q2 {
    public static void main(String[] args) {
        Scanner sc =  new Scanner(System.in);
        int n = sc.nextInt();
        int p = sc.nextInt();
        int q = sc.nextInt();
        int l[] = new int[n];
        int r[] = new int[n];
        int t[] = new int[n];
        TreeSet<Integer> set = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            l[i] = sc.nextInt();
            set.add(l[i]);
        }
        for (int i = 0; i < n; i++) {
            r[i] = sc.nextInt();
            set.add(r[i]);
            set.add(r[i]+1);
        }
        for (int i = 0; i < n; i++) {
            t[i] = sc.nextInt();
        }
        int idxCnt = set.size();
        HashMap<Integer,Integer> idMap = new HashMap<>();
        int[] reverseMap = new int[idxCnt+2];
        int id = 1;
        for (Integer idx : set) {
            // System.out.println("map 映射:("+idx+"->"+id+")");
            idMap.put(idx,id);
            reverseMap[id++] = idx;
        }

        int diffP[] = new int[set.size()+2];
        int diffQ[] = new int[set.size()+2];
        int ans = 0;
        for (int i = 0; i < n; i++) {
            int idxL = idMap.get(l[i]);
            int idxR = idMap.get(r[i]);
            if(t[i]==1) {
                diffP[idxL]++;
                diffP[idxR+1]--;
            }
            else{
                diffQ[idxL]++;
                diffQ[idxR+1]--;
            }
        }/*
        System.out.print("diffP:");
        for (int i = 1; i < diffP.length; i++) {
            System.out.print(diffP[i]+"\t");
        }
        System.out.print("\ndiffQ:");
        for (int i = 1; i < diffQ.length; i++) {
            System.out.print(diffQ[i]+"\t");
        }
        System.out.println();*/
        for (int i = 1; i < diffP.length; i++) {
            diffP[i] += diffP[i-1];
            diffQ[i] += diffQ[i-1];
        }
        for (int i = 1; i < reverseMap.length-1; i++) {
            //   System.out.println("考虑当前id:"+i+"\tdiffP:"+diffP[i]+"\tdiffQ:"+diffQ[i]);
            //  System.out.println("\trealPos:"+reverseMap[i]+"\tnextPos:"+reverseMap[i+1]);
            if(diffP[i]>=p && diffQ[i]>=q) {
                ans+=(reverseMap[i+1]-reverseMap[i]);
            }
        }
/*
        System.out.print("diffP:");
        for (int i = 1; i < diffP.length; i++) {
            System.out.print(diffP[i]+"\t");
        }
        System.out.print("\ndiffQ:");
        for (int i = 1; i < diffQ.length; i++) {
            System.out.print(diffQ[i]+"\t");
        }
        System.out.println();
        System.out.println(diffP[set.size()]+"\t"+diffQ[set.size()]);*/
        System.out.println(ans);
    }
}


#23届秋招笔面经##2023一起秋招吧##滴滴笔试##滴滴##面经笔经#
全部评论
同问第一题,lz有消息了踢我一脚
点赞 回复 分享
发布于 2022-09-17 16:52 浙江
第一题的回溯要剪枝,可以返回一个bool值,表示这次回溯是否成功,比方说str的?换成1后,这次回溯成功了,那么就不用继续再换成2、3、4、。。。了,直接剪枝;(我一开始只在i==lengh处做判断,会超时,只能通过72);  第二题只过了81,思路应该是对的,但10e9的数组太大了,不太明白这个怎么处理。
点赞 回复 分享
发布于 2022-09-17 16:55 江苏
第二题思路大概是什么呀大佬
点赞 回复 分享
发布于 2022-09-17 16:55 黑龙江
第一题它说字符串长度大于10000我就没敢回溯
1 回复 分享
发布于 2022-09-17 17:23 四川
压缩下标能具体说一下吗,c++看不太懂JAVA代码
点赞 回复 分享
发布于 2022-09-17 17:35 广东

相关推荐

03-14 10:50
已编辑
门头沟学院 Java
鼠鼠华子无线实习,bg双九,通软岗位,论文,专利,竞赛都水过一点,秋招《非all&nbsp;in》选手,《泡池子泡到肿》选手,分享一下自己的时间线,给大家多一个参考。---实习末期,接口人电话沟通,最终决定求稳继续投递实习原部门---免机试,九月走完线下流程,开始入池---十月起开始保温,打听手中已拿offer,比较薪资,给出华子的预估职级和薪资(完全不给A的空间)---十月第二次保温,询问签约情况,各种暗示劝说留空白三方---十月底签约另一家公司,遂被降低优先级---十一月若干次常规保温信息(还有机会/稍晚一点/等这周。。。)---十二月告知部门有13的指标,愿意接受可以立刻发offer(难绷,妄图性...
蓦然回首一枝花:能体会楼主的心情,我投了华为无线的成研所,双9bg,被华子最后开了个13级的侮辱价 12.3打oc电话的时候接口人表示乐观等待就行,然后中间4周就开始不回消息或者拖四五天才回,翻来覆去就是“等审批结果”。 12月27号,我看应该是泡不出来了所以联系了部门流转,这时候接口人开始主动给我打电话告诉我马上就能出结果了,于是我也没继续流转。 12.31给我打电话说得降薪审批,薪资大概就是对应着13级的样子,但我当时因为投的是成都的,没有意识到薪资是按照上海开的,还以为这个薪资在成都是14级,加上那个时候我也“孝”劲上来了,想着能收我就行,于是答应了。 1.13开了出来,联系我了薪资,确认了下发现是13级,当时实在是接受不了,于是最终还是拒了。 拒的时候接口人告诉我说这个hc真的是他们争取了很久才争取到的,不过我一想到我12.3就打了oc电话,中间4周一直不搭理我或吊着我,最后12.31才告诉我争取不下来14级要降薪,也许争取真的要争取那么久吧,呵。 这个过程中也为华为拒了不少offer,大厂的、央企的、银行的都拒过,网上总说“华为没有发小奖状之前hr的话一个字都不要信”,当时没有放在心上,以为不会摊到我头上,现在来看当时也挺年轻气盛的。我感觉要不是中途我一直在烦hr,可能我就和楼主一样被泡死了吧,不过最后给开了个13级也和泡死没差,不过是被多侮辱了一次。 最后借楼主这个贴就只想跟后面的人提一个建议吧,还是那句说烂了的,“华为没有发小奖状之前hr的话一个字都不要信”,真的不要以为这样的情况不会出现在自己身上,不要拿自己的一辈子前途去送华为hr业绩。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务