5.13携程笔试

吐血了,第一题全排列不会写,然后最后20分钟写出来了,但是没有DEBUG,交完卷子发现是因为自己用了HashSet线程不安全报错了,然后在结束前10分钟把HashSet改成CopyOnWriteArraySet,全排列成功了。交早了,后悔;
我好渣,第一题ac14%,第二题ac83%;又一次笔试挂了。


import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.regex.*;

public class Main {


/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^   通过14%
******************************开始写代码******************************/
    static int procee(int[] scores, int[] cards) {
        //开始用了不安全的数据结构HashSet,交早了。交完,距结算前10分钟做出来了
        Set<int[]> set=new CopyOnWriteArraySet<>();
        set.add(cards);
        for(int i=0;i<cards.length-1;i++){
            for(int[] a:set){
                int[] tmp=a.clone();
                int mid=tmp[i];
                tmp[i]=tmp[i+1];
                tmp[i+1]=mid;
                set.add(tmp);
            }
        }
        
        int sum=0;
        for(int[] a:set){
            int sum1=scores[0];
            int pre=0;
            for(int i:a){
               if(pre+i<scores.length) {
                   sum1+=scores[pre+i];
                   pre+=i;
               }else {
                   break;
               }
            }
            sum=Math.max(sum,sum1);
        }
        return sum;
    }
/******************************结束写代码******************************/


    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int res;

        int _scores_size = 0;
        _scores_size = Integer.parseInt(in.nextLine().trim());
        int[] _scores = new int[_scores_size];
        int _scores_item;
        for(int _scores_i = 0; _scores_i < _scores_size; _scores_i++) {
            _scores_item = Integer.parseInt(in.nextLine().trim());
            _scores[_scores_i] = _scores_item;
        }

        int _cards_size = 0;
        _cards_size = Integer.parseInt(in.nextLine().trim());
        int[] _cards = new int[_cards_size];
        int _cards_item;
        for(int _cards_i = 0; _cards_i < _cards_size; _cards_i++) {
            _cards_item = Integer.parseInt(in.nextLine().trim());
            _cards[_cards_i] = _cards_item;
        }

        res = procee(_scores, _cards);
        System.out.println(String.valueOf(res));

    }
}
import java.util.Scanner;

/**
 * Created by lwf on 2021/5/13 19:04
 * AC 83不行了
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int[] X=new int[N];
        int[] Y=new int[N];
        int[] Z=new int[N];
        for(int j=0;j<N;j++){
                X[j]=sc.nextInt();
            }
        for(int j=0;j<N;j++){
            Y[j]=sc.nextInt();
        }
        for(int j=0;j<N;j++){
            Z[j]=sc.nextInt();
        }
        int start=0;
        int sum=0;
        for(int n=0;n<N;n++) {
            start=n;
            while (start < N) {
                for (int i = 1; i <= N - start; i++) {
                    int sum1 = Z[start];
                    int pre = start;
                    for (int i1 = start + i; i1 < N; i1++) {
                        if (Y[pre] <= X[i1]) {
                            sum1 += Z[i1];
                            pre = i1;
                        }
                    }
                    sum = Math.max(sum, sum1);
                }
                start++;
            }
        }
        System.out.println(sum);
        sc.close();
    }
}



#携程##java工程师##笔经#
全部评论
楼主,请问携程笔试多少分能过
点赞 回复 分享
发布于 2021-05-13 21:02
第一题递归85%,没想出来动态规划,第二题租车订单最大收益直接递归ac
点赞 回复 分享
发布于 2021-05-13 21:02
两道80%有机会吗
点赞 回复 分享
发布于 2021-05-13 21:07
题不一样呢。
点赞 回复 分享
发布于 2021-05-13 21:08
还好吧 你差不多a了一半 这过不了?
点赞 回复 分享
发布于 2021-05-13 21:17
ak可能有面试机会
点赞 回复 分享
发布于 2021-05-13 21:25
第一题直接回溯百分之85,第二题动规AC了
点赞 回复 分享
发布于 2021-05-14 16:14

相关推荐

11-01 08:48
门头沟学院 C++
点赞 评论 收藏
分享
2 6 评论
分享
牛客网
牛客企业服务