同学 2020/4/10 美团笔试

纯粹记录,现在没时间都做一遍了,以后刷多点leetcode会回过头来看的,有好的想法可以留言讨论一下。

带头冲锋

代码如下:

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        int n =Integer.parseInt(sc.nextLine().trim());
        String startStr =sc.nextLine().trim();
        String endStr =sc.nextLine().trim();
        String[] startStrArr=startStr.split("\\s+");
        String[] endStrArr=endStr.split("\\s+");
        int[] startArr =new int[n+1];//根据选手编号找出发位置
        int[] parStartArr=new int[n];//根据出发位置找选手编号
        int[] endArr =new int[n+1];
        int[] parEndArr=new int[n];
        int count =0;
        for(int i=0;i<n;i++){
            int manIndex = Integer.parseInt(startStrArr[i]);
            startArr[manIndex] =i;
            parStartArr[i] =manIndex;
        }
        for(int j=0;j<n;j++){
            int manIndex = Integer.parseInt(endStrArr[j]);
            endArr[manIndex]=j;
            parEndArr[j] =manIndex;
        }
        for(int k=0;k<n-1;k++){
            int manIndex = parEndArr[k];//第k个到达的人的编号
            int startPosition = startArr[manIndex];//找到这个编号的选手之前出发的选手
            for(int m=0;m<startPosition;m++){
                int beforeMan =parStartArr[m];//在manIndex之前的选手编号
                int reachIndex=endArr[beforeMan];//根据编号找到达的位置
                if(reachIndex>k){
                    count++;
                    break;
                }
            }

        }
        System.out.println(count);
    }
}

金字塔题目题解: https://blog.csdn.net/shao1996/article/details/51910468

类似斐波那契数列,找到规律,一个for循环解决。代码如下:

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        double MOD=Math.pow(10,9)+7;
        int k;
        Scanner sc =new Scanner(System.in);
        k = sc.nextInt();
        if(k<4){
            if(k==3) System.out.println(6);
            else if(k==2) System.out.println(3);
            else System.out.println(0);
            return;
        }
        double step[]= new double[k+1];
        step[0]=0;step[1]=0;step[2]=3;step[3]=6;
        for(int i = 4; i <= k; i++)
        {
            step[i] = (3*step[i-2] + 2*step[i-1])%MOD;
        }
        System.out.println(new Double(step[k]).intValue());
    }
}

发布了24 篇原创文章 · 获赞 3 · 访问量 1301

猜你喜欢

转载自blog.csdn.net/qinian_ztc/article/details/105424686