8.28小红书后端笔试

# 1、返回数组中下标为m的值是第几大,如果相等,则在前面的大
private static int fun(int id,int[] arr){
        int res = 0;
        int a = arr[id-1];
        for (int j : arr) {
            if (j > a) {
                ++res;
            }
        }
        for (int i = id-1; i >= 0; i--) {
            if (a == arr[i]){
                ++res;
            }
        }
        return res;
    }


# 2、返回数组中两个乘积大于或等于目标值的方案个数。
private static long fun(int n,long k,long[] nums){
        Arrays.sort(nums);
        long res = 0;
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                if (nums[i]*nums[j] >= k){
                    res += n-j;
                    break;
                }
            }
        }
        return res*2;
    }


# 3、返回树中两两相交节点最多有几对。
public class Main {
    static int res = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<List<Integer>> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(new ArrayList<>());
        }
        for (int i = 0; i < n - 1; i++) {
            int a = scanner.nextInt();
            list.get(a-1).add(i+2);
        }
        System.out.println(fun(list));
    }

    private static int fun(List<List<Integer>> list){
        dfs(list,0);
        return res;
    }

    private static int dfs(List<List<Integer>> list,int index){
        List<Integer> nums = list.get(index);
        if (nums.isEmpty()){
            ++res;
            return -1;
        }
        for (int i = 0; i < nums.size(); i++) {
            int flag = dfs(list, nums.get(i) - 1);
            if (flag == -1){
                nums.clear();
            }
        }
        return 0;
    }
}



#小红书笔试#
全部评论
最后一道题是什么思路啊。C++的,看java代码有点费劲
点赞 回复 分享
发布于 2022-08-28 18:08 浙江
这么写如果第一个节点就是子节点咋办呢?
点赞 回复 分享
发布于 2022-08-29 17:07 广东

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
评论
4
6
分享
牛客网
牛客企业服务