9.28 滴滴笔试 100 72

秋招到现在一场面试都没有,给鼠鼠一个机会吧求面试求意向

第一题上来我直接dfs,过了82%,加了个剪枝,就直接100%了

import java.util.Scanner;

public class first {
    public static int ans=0;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] wood=new int[3];
        wood[0]=in.nextInt();
        wood[1]=in.nextInt();
        wood[2]=in.nextInt();
        int[][][] find=new int[wood[0]+1][wood[1]+1][wood[2]+1];
        if(judge(wood)){
            find[wood[0]][wood[1]][wood[2]]=1;
            ans++;
        }
        dfs(n,1,wood,find);
        System.out.println(ans);
    }
    public static void dfs(int n,int cut,int[] wood,int[][][] find){
        if(cut>n)
            return;
        for(int i=0;i<3;i++){
            if(wood[i]>cut){
                wood[i]-=cut;
                boolean flag=false;
                //判断这种当前的组合是否已经计算过,是的话就不用再往下dfs了
                if(find[wood[0]][wood[1]][wood[2]]==1){
                    flag=true;
                }
                if(judge(wood)&&!flag){
                    find[wood[0]][wood[1]][wood[2]]=1;
                    ans++;
                }
                if(!flag)
                    dfs(n,cut+1,wood,find);
                wood[i]+=cut;
            }
        }
    }
    public static boolean judge(int[] wood){
        if(wood[0]+wood[1]>wood[2]&& Math.abs(wood[0]-wood[1])<wood[2])
            return true;
        return false;
    }
}

第二题用HashMap+List存树,每次询问都用bfs求所有距离再求和,过了72%

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class second {
    public static void main(String[] args) throws IOException {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String[] first_line=bf.readLine().split(" ");
        int n = Integer.valueOf(first_line[0]);
        int m = Integer.valueOf(first_line[1]);
        HashMap<Integer, List<Integer>> map=new HashMap<>();
        for(int i=0;i<n;i++){
            map.put(i+1,new ArrayList<>());
        }
        String[] second_line=bf.readLine().split(" ");
        int index=0;
        for(int i=2;i<=n;i++){
            int node=Integer.valueOf(second_line[index++]);
            List<Integer> first=map.get(i);
            first.add(node);
            map.put(i,first);
            List<Integer> second=map.get(node);
            second.add(i);
            map.put(node,second);
        }
        String[] third_line=bf.readLine().split(" ");
        for(int i=0;i<m;i++){
            int start=Integer.valueOf(third_line[i]);
            int ans=bfs(start,n,map);
            System.out.println(ans);
        }
    }
    public static int bfs(int start,int n,HashMap<Integer, List<Integer>> map){
        boolean[] visited=new boolean[n+1];
        Queue<Integer> queue=new LinkedList<>();
        queue.add(start);
        int ans=0;
        int distance=1;
        while(!queue.isEmpty()){
            int nums=queue.size();
            while(nums>0){
                int st=queue.poll();
                visited[st]=true;
                List<Integer> neighbours=map.get(st);
                for(int neighbour:neighbours){
                    if(visited[neighbour]==false){
                        queue.add(neighbour);
                        ans+=distance;
                    }
                }
                nums--;
            }
            distance++;
        }
        return ans;
    }
}

全部评论
楼主投的什么岗位
点赞 回复 分享
发布于 2023-09-29 18:50 广东

相关推荐

02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

更多
牛客网
牛客企业服务