百度笔试 java 3.14

百度笔试 java 3.14
第二题A了 60%  只考虑了两两组合 还可以大于两两
import java.util.Scanner;

public class Main2 {
    public static double solution(int n, double m, double[][] arr){
        if (n<1 || n>20 || m<1 || m>1e9)
            return 0;

        for (int i = 0; i<n; i++){
            if (arr[i][0]<1 || arr[i][0]>1e9 || arr[i][1]<1 || arr[i][1]>1e6)
                return 0;
        }

        double count = 0;

        for (int i = 0; i<n; i++){
            if (arr[i][0]>m){
                count += arr[i][1];
                arr[i][0] = 0;
            }
        }

        for (int i = 0; i<n; i++){
            if (arr[i][0] != 0 && arr[i][1] !=0){
                double min = minnum(n,arr)[0][0];
                double num = arr[(int)minnum(n,arr)[0][1]][1];
                if (arr[i][0]+min>=m){
                    double temp = Math.min(num,arr[i][1]);
                    count += temp;
                    if (arr[(int)minnum(n,arr)[0][1]][1] - temp >= 0)
                        arr[(int)minnum(n,arr)[0][1]][1] -= temp;
                    if (arr[i][1] - temp >= 0)
                        arr[i][1] -= temp;
                }
            }
        }

        for (int i = 0; i<n; i++){
            if (arr[i][0] != 0 && arr[i][1] !=0){
                count += (int)((arr[i][0]*arr[i][1]) / m);
            }
        }

        return count;
    }

    public static double[][] minnum(int n, double[][] arr){
        double[][] res = new double[1][2];
        double min = 1e9;
        int index = 0;
        for (int i = 0; i<n; i++){
            if (arr[i][1] != 0 && arr[i][0] != 0){
                if (arr[i][0]<min){
                    min = arr[i][0];
                    index = i;
                }
            }
        }
        res[0][0] = min;
        res[0][1] = index;

        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double m = sc.nextInt();
        double[][] arr = new double[n][2];

        for (int i = 0; i<n; i++){
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }

        System.out.println((int)solution(n, m ,arr));

    }
}

第一题硬刚 100%
import java.util.Scanner;

public class Main {
    public static int solution(int n, int k, int[] arr){
        if (n<1 || n>1000 || k<1 || k>1000)
            return 0;

        int count = 0;
        boolean flag = false;

        for (int i = 0; i<n; i++){
            if (arr[i] != 0){
                flag = false;
                for (int j = i+1; j<n; j++){
                    if (arr[j] == arr[i]){
                        arr[j] = 0;
                        flag = true;
                        count++;
                        break;
                    }
                }
            }

            if (!flag){
                count++;
                flag = true;
            }

        }

        return count;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] arr = new int[n];

        for (int i = 0; i<n; i++){
            arr[i] = sc.nextInt();
        }

        System.out.println(solution(n, k ,arr));

    }
}

纪念我第一次发帖 略显羞涩
#百度##笔试题目#
全部评论
第二题我直接大于的算一部分,小于的求和后得sum/m,两部分加起来就是答案,然后不知怎么完善,最后过了60
1 回复 分享
发布于 2020-03-14 21:23
我也是😂
点赞 回复 分享
发布于 2020-03-14 21:07
只ac一个
点赞 回复 分享
发布于 2020-03-14 21:08
只考虑了两两组合 还可以大于两两,那就可以双指针吧?如果<m的话,把 i 指针往后移动来增大工资和;>=m说明就是一个月然后计数并且i后移动,j前移动
点赞 回复 分享
发布于 2020-03-14 21:09
有百度的交流群吗
点赞 回复 分享
发布于 2020-03-14 21:17
我第二题先把大于m的发了,剩下的不知道怎么办,直接求和除m,竟然ac了50%
点赞 回复 分享
发布于 2020-03-14 21:24
第一题可以把k的数据用桶排序存起来,再遍历一次计算
点赞 回复 分享
发布于 2020-03-14 22:25
还可以只考虑一部分的吗🤣我就想着怎么整个给他完成了。。
点赞 回复 分享
发布于 2020-03-14 23:41

相关推荐

点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务