【百度笔试】9.10java

一、发工资
import java.util.*;

class Node{
    int x;
    int y;
    public Node(int x,int y){
        this.x = x;
        this.y = y;
    }
}
public class B1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        List<Node> list = new ArrayList<>();
        for(int i = 0;i<n;i++){
            Node node = new Node(sc.nextInt(),sc.nextInt());
            list.add(node);
        }
        list.sort(new Comparator<Node>() { 
                public int compare(Node o1, Node o2) {
                return o1.x -o2.x;
            }
        });
        int k ,ans = 0;
        for(k = n-1;k>=0;k--){
            if(list.get(k).x>=m){
                ans += list.get(k).y;
            }else
                break;
        }
        boolean flag = true;
        while(flag){
            flag = false;
            int t = m;
            //优先大面额
            for(int i = k;i>=0;i--){
                while(t >list.get(i).x && list.get(i).y >0){
                    t -= list.get(i).x;
                    list.get(i).y--;
                }
            }
            //再用小面额填补
            for(int i = 0;i<=k;i++){
                while(t>0 && list.get(i).y>0){
                    t -= list.get(i).x;
                    list.get(i).y --;
                }
            }
            if(t <= 0){
                flag = true;
                ans ++;
            }
        }
        System.out.println(ans);
    }
}

二、士兵扎营个数
import java.util.Scanner;

public class B2 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        System.out.println(solve(n,k));
    }
    private static int solve(int n,int k){
        if((n-k)%2 != 0 || n<=k){
            return 1;
        }else{
            return solve((n-k)/2,k) + solve((n+k)/2,k);
        }
    }
}

三、删除叶子节点。
有个错的思路,搞了一会没时间了。有大佬帮忙提供一个思路。

AC了前两个
#笔试题目##笔经##百度#
全部评论
有哪位大佬还记得题面,可以说一下吗
点赞 回复 分享
发布于 2019-09-17 15:23
全是编程题吗
点赞 回复 分享
发布于 2019-09-16 10:52
想请教一下百度的java研发笔试,编程语言只能用java吗?可以用python吗?
点赞 回复 分享
发布于 2019-09-15 18:39
拓扑排序的思路,可惜当时没做完 import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Scanner; import java.util.TreeMap; public class Demo3 {     public static void main(String[] args) {         // TODO Auto-generated method stub         Scanner in = new Scanner(System.in);         int n = in.nextInt();         int num[][] = new int[n-1][2];         for(int i=0;i<n-1;i++) {             num[i][0] = in.nextInt();             num[i][1] = in.nextInt();         }         int indrgee[] = new int[n+1];         //Map<Integer,List<Integer>> map = new HashMap<Integer, List<Integer>>();         List<Integer> list = new ArrayList<>();         for(int i=1;i<=n;i++) list.add(i);         for(int i=0;i<n-1;i++) {             /*if(map.containsKey(num[i][0])) {                 map.get(num[i][0]).add(num[i][1]);             }else {                 List<Integer> list = new ArrayList<Integer>();                 list.add(num[i][1]);                 map.put(num[i][0], list);             }*/             indrgee[num[i][0]]++;         }         Map<Integer, Integer> treemap = new TreeMap<>();         boolean isDelete[] = new boolean[n+1];         //int count=0;         while(list.size()>0) {             Queue<Integer> queue = new LinkedList<>();             for(int i=1;i<=n;i++) {                 if(!isDelete[i]&&(indrgee[i]==0||indrgee[i]==1)) {                     queue.offer(i);                     list.remove(new Integer(i));                     isDelete[i]=true;                     /*System.out.println("删除:"+i);                     for(int j:list) {                         System.out.println(j);                     }*/                 }             }                          while(!queue.isEmpty()) {                 int temp = queue.poll();                 for(int i=0;i<n-1;i++) {                     if(num[i][1]==temp) {                         indrgee[num[i][0]]--;                     }                 }                 if(!treemap.containsKey(temp)) {                     treemap.put(temp, 1);                 }else {                     treemap.put(temp, treemap.get(temp)+1);                 }             }                          for(int i:list) {                 if(!treemap.containsKey(i)) {                     treemap.put(i, 1);                 }else {                     treemap.put(i, treemap.get(i)+1);                 }             }         }         for(Map.Entry<Integer, Integer> entry:treemap.entrySet()) {             System.out.println("节点:"+entry.getKey()+",次数:"+entry.getValue());         }         /*List<Integer> res = new ArrayList<Integer>(treemap.values());         for (int i = 0; i < res.size(); i++) {             if(i==res.size()-1) {                 System.out.print(res.get(i));             }else {                 System.out.print(res.get(i)+" ");             }         }*/     } }
点赞 回复 分享
发布于 2019-09-11 15:48
第三题我用图的邻接矩阵和度的数组来做的,没过😂
点赞 回复 分享
发布于 2019-09-11 09:28
第三题题目是啥 就是删除二叉树的所有叶子节点吗
点赞 回复 分享
发布于 2019-09-10 21:53

相关推荐

评论
3
18
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务