2022.8.28 小红书笔试

第一题 使用任意一种稳定排序即可
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Q1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int id = sc.nextInt();
        int[][] records = new int[n][2];
        for (int i = 0; i < n; i++) {
            records[i][0] = i;
            int ans = 0;
            for (int j = 0; j < m; j++) {
                ans += sc.nextInt();
            }
            records[i][1] = ans;
        }
        Arrays.sort(records, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) {
                if (o1[1] != o2[1]){
                    return o2[1] - o1[1];
                }
                return o1[0] - o2[0];
            }
        });
        for (int i = 0; i < n; i++) {
            if(records[i][0] == id){
                System.out.println(i);
                break;
            }
        }
    }
}
第二题 求满足乘积大于K的组合数
import java.util.Arrays;
import java.util.Scanner;

public class Q2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long k = sc.nextLong();
        long[] power = new long[n];
        for (int i = 0; i < n; i++) {
            power[i] = sc.nextLong();
        }
        Arrays.sort(power);
        long ans = 0;
        for (int i = n - 1; i > 0; i--) {
            long temp = ans;
            for (int j = i - 1; j >= 0 ; j--) {
                if (power[i] * power[j] < k){
                    break;
                }
                ans++;
            }
            if (ans == temp){
                break;
            }
        }
        System.out.println(ans);
    }
}
第三题 一对一
import java.util.Arrays;
import java.util.Scanner;

public class Q3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int ans = 0;
        boolean[] vis = new boolean[n + 1];
        int[][] friends = new int[n + 1][2];
        int[] sum = new int[n + 1];
        for (int i = 0; i <= n; i++) {
            friends[i][0] = i;
        }
        int[][] graph = new int[n + 1][n + 1];
        for (int i = 2; i <= n; i++) {
            int j = sc.nextInt();
            graph[i][j] = 1;
            graph[j][i] = 1;
            friends[i][1]++;
            friends[j][1]++;
            sum[i]++;
            sum[j]++;
        }
        Arrays.sort(friends,(int[] o1, int[] o2) -> o1[1] - o2[1]);
        for (int i = 1; i <= n ; i++) {
            int index = friends[i][0];
            if(!vis[index]){
                vis[index] = true;
                int min = Integer.MAX_VALUE;
                int next = 0;
                for (int j = 1; j <= n; j++) {
                    if (graph[index][j] == 1 && min > sum[j] && !vis[j]){
                        min = sum[j];
                        vis[next] = false;
                        next = j;
                        vis[next] = true;
                    }
                }
                if (next != 0){
                    ans++;
                }

            }
        }
        System.out.println(ans);
    }
}
菜鸡纪念第一次提前交卷。
前两题都很简单,最后一题虽然A了,但代码写的很差,应该有更好的。

#小红书笔试##笔试题简单,小红书真有海量hc吗#
全部评论
第一题偏偏就选了个不稳定的堆排序,一直27,吐了
1 回复 分享
发布于 2022-08-28 18:07 浙江
厉害了老哥
1 回复 分享
发布于 2022-08-28 20:04 辽宁
请问第三题解题的思路可以分享一下吗
点赞 回复 分享
发布于 2022-08-28 18:04 浙江
楼主第二题我的代码和你一样不过我输出的是2*ans,样例是4,你这个是2,你这个好像也不对噢
点赞 回复 分享
发布于 2022-08-29 12:01 广东
为什么我的题不是这个,我是后端开发,我的好难
点赞 回复 分享
发布于 2022-08-29 14:44 四川

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
评论
14
24
分享
牛客网
牛客企业服务