拼多多笔试思路

拼多多第一题代码: 
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

class sortArr {
    public static void main(String[] args) {
        //利用java里的优先队列来实现一个最大堆,最后把前n个poll出来即可
        PriorityQueue<Integer> q = new PriorityQueue<Integer>(new Comparator<Integer>() {
            @Override
            //堆的比较逻辑
            public int compare(Integer o1, Integer o2) {
                if ((o1 & 1) == 0 && (o2 & 1) == 0){
                    return o2-o1;
                }
                if ((o1 & 1) == 1 && (o2 & 1) == 1){
                    return o2-o1;
                }
                if ((o1 & 1) == 0 && (o2 & 1) == 1){
                    return -1;
                }
                if ((o1 & 1) == 1 && (o2 & 1) == 0){
                    return 1;
                }
                return 0;
            }
        });
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        //处理输入
        int i = str.length()-1;
        for (;i >= 0; i--) {
            if (str.charAt(i) == ';') {
               break;
            }
        }
        int n = Integer.valueOf(str.substring(i+1));
        String nums = str.substring(0,i);
        String[] numsArr = nums.split(",");
        //入堆
        for (int j = 0; j < numsArr.length; j++) {
            q.add(Integer.valueOf(numsArr[j]));
        }
        String res = "";
        for (int j = 0; j < n; j++) {
            res += q.poll();
            if (j != n-1) {
                res += ",";
            }
        }
        System.out.println(res);
    }
}

第二题:
import java.util.Scanner;

class Puke {
    static String res="";
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for (int i = 0; i < n; i++) {
            String num1 = in.next();
            String num2 = in.next();
            res += "{\n";
            dfs(num1,"",num2,"");
            if (i!=n-1) res += "}\n";
            else res += "}";
        }
        System.out.println(res);
    }

    //num1是自己手里目前有多少张牌,newStr是新序列里的所有拍,num2是男朋友的牌,step是每一步的操作
    private static void dfs(String num1, String newStr, String num2,String step) {
        //如果新序列和男朋友牌相等那么就不递归了
        if (newStr.equals(num2)) {
            res += step+"\n";
            return;
        }
        //手里还有牌,那么递归三种结果,递归回来后要把step置回进行前一个状态
        if (num1.length() != 0) {
            char head = num1.charAt(0);
            step += "d ";
            dfs(num1.substring(1),newStr,num2,step);
            step = step.substring(0,step.length()-2);
            step += "l ";
            dfs(num1.substring(1),head+newStr,num2,step);
            step = step.substring(0,step.length()-2);
            step += "r ";
            dfs(num1.substring(1),newStr+head,num2,step);
            step = step.substring(0,step.length()-2);
        }
    }
}


代码结果是正确的,但是格式一直调不通,调整不出测试用例的格式,明明输出是和测试用例一模一样的,就是过不了。。#拼多多##笔试题目#
全部评论
操作次数要等于第一个字符串的长度
点赞 回复 分享
发布于 2019-09-01 17:09
思路一样,我也过不了
点赞 回复 分享
发布于 2019-09-01 17:08
是不是res+=“}”这里啊,需要换行
点赞 回复 分享
发布于 2019-09-01 17:09
请问第二题是什么意思呀,如果把最左边的牌丢弃,就是其他牌也加入新的序列吗?
点赞 回复 分享
发布于 2019-09-01 17:09
我也是这个思路,输出也对,但是代码确实过不了啊,。
点赞 回复 分享
发布于 2019-09-01 17:09
字典序?
点赞 回复 分享
发布于 2019-09-01 17:29
自己还是太菜了。。。😭
点赞 回复 分享
发布于 2019-09-01 17:44
第一题优先队列那行html啥意思
点赞 回复 分享
发布于 2019-09-01 18:33
第二题小梅那个是不是抽出的牌中可能有重复的?
点赞 回复 分享
发布于 2019-09-01 19:18
我就得你的递归终止有问题,加入在newStr.equals(num2) == true时,你的num1还有字符,此时需要将它们都删除,所以需要加入一些"d...d"。
点赞 回复 分享
发布于 2019-09-21 19:40
嗯嗯 后面发现了哈哈
点赞 回复 分享
发布于 2019-09-21 20:58

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
评论
点赞
7
分享
牛客网
牛客企业服务