首页 > 京东 2021/08/21 校招 测试开发 笔试 完整题目
头像
牛客584837756号
编辑于 2021-08-21 21:18
+ 关注

京东 2021/08/21 校招 测试开发 笔试 完整题目

30 道单选题(60分),2 道编程题(40分),编程题都是 ACM 模式需要自己写输入输出,一共 2 小时

对角线上的邻居

时间限制: 3000MS
内存限制: 589824KB

题目描述

小明搬进了一个新的小区里,对里面的环境和住户都比较陌生,小明发现这个小区的房屋是一个网格型排列,所有房屋在一个网格状的地图上。小区一共有 n 户人家,我们假设每户人家的位置表示为(x,y)。小明觉得如果两家是邻居的话,他们的关系应该会更好一些。现在我们定义当两户人家处在相同的任意一个对角线上的时候,则两户人家为邻居。现在小明想要统计这样的邻居一共有多少对。

输入描述

第一行 1 个整数n,,表示有 n 户人家。

接下来 n 行,第 i 行包含两个整数,表示第 i 户人家的位置为()。

输出描述
一行一个整数,表示有多少对邻居。

样例输入

5
3 4
4 5
5 6
4 7
3 8

样例输出

6

提示

对于样例输入,以下几对人家均为邻居
(3,4)与(4,5)
(3,4)与(5,6)
(4,5)与(5,6)
(5,6)与(4,7)
(5,6)与(3,8)
(4,7)与(3,8)

73%时间超限

import java.util.Scanner;
// 73% 时间超限,尝试了一下使用boolean[][] flag = new boolean[n][n];用来记录是否判断过,结果直接 7% 内存超限。
public class jd1 {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] nums = new int[n][2];
        for (int i = 0; i < n; i++) {
            nums[i][0] = sc.nextInt();
            nums[i][1] = sc.nextInt();
        }
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if(Math.abs(nums[i][0] - nums[j][0]) == Math.abs(nums[j][1] - nums[i][1])){
                    count++;
                }
            }
        }
        System.out.println(count);
    }
}

中庸的数

时间限制: 3000MS
内存限制: 589824KB

题目描述

有若干个数形成一个可重集合,它们中很多都想做一个中庸的数,即既不是集合中最大的(或之一),也不是集合中最小的(或之一)。显然,不可能满足所有数。好在还是有一些数并不介意这一点。你需要从这些数中选出一个可重的子集,该子集中介意成为最值的数都得到满足(指不能成为子集中的最值)。请计算可以取的最大可重子集的大小。

输入描述

第一行一个整数 n,1 <= n <= 100000
后面 n 行,每行两个整数 x, y,x <= 1000000000,y 为 0 或 1。x 表示该数的值,y 为 1 表示该数不介意成为最值,为 0 则表示介意。

输出描述

一个整数,表示可取的最大的子集大小

样例输入

5
4 1
2 0
8 1
9 0
5 0

样例输出

3

90%答案错误的代码

import java.util.Arrays;
import java.util.Scanner;
// 通过 90 % 答案错误
public class jd2 {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] nums = new int[n][2];
        for (int i = 0; i < n; i++) {
            nums[i][0] = sc.nextInt();
            nums[i][1] = sc.nextInt();
        }
        Arrays.sort(nums, (a,b)-> a[0]-b[0]);
        int i = 0, j = nums.length - 1;
        for (; i < n; i++) {
            if(nums[i][1] == 1){
                break;
            }
        }
        for (; j >= 0; j--){
            if(nums[j][1] == 1){
                break;
            }
        }
        System.out.println(Math.max(j - i + 1, 0));
    }
}

全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐