美文网首页
2017年今日头条笔试题目

2017年今日头条笔试题目

作者: dreamsfuture | 来源:发表于2018-03-11 17:20 被阅读0次

    第一题

    P 为 给 定 的 二 维 平 面 整 数 点 集 。 定 义 P 中 某 点 如 果 × 满 足 P 中 任 意 点 都 不 在 × 的 右 上 方 区 域 内 ( 横 纵 坐标 都 大 于 × ) , 则 称 其 为 “ 最 大 的 ” 。 求 出 所 有 “ 最 大 的 ” 点 的 集 合 。 〈 所 有 点 的 横 坐 标 和 纵 坐 标 都 不 重 复 . 坐 标 轴 范 围 在 [ 0 , 1 e9 ] 内 ) 如 下 图 实 心 点 为 满 足 条 件 的 点 的 集 合 。


    第一题

    请 实 现 代 码 找 到 集 合 P 中 的 所 有 ” 最 大 “ 点 的 集 合 并 输 出 。 第 一 行 输 入 点 集 的 个 数 N , 接 下 来 N 行 , 每 行 两 个 数 字 代 表 点 的 x 轴 和 Y 轴 。
    输 出
    输 出 “ 最 大 的 ” 点 集 合 , 按 照 x 轴 从 小 到 大 的 方 式 输 出 , 每 行 两 个 数 字 分 别 代 表 点 的 x 轴 和 Y 轴 。
    样 例 输 入

    5
    1 2
    5 3
    4 6
    7 6
    9 0
    

    题目解答:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            long[][] arr = new long[n][2];
            for(int i = 0; i < n;i++){
                arr[i][0] = in.nextLong();
                arr[i][1] = in.nextLong();
            }
            System.out.println(solve(n,arr));
            in.close();
        }
    
        public static int solve(int n, long[][] arr) {
            int count = 0;
            int i,j;
            for(i = 0; i < n; i++){
                boolean flag = true;
                for(j = 0; j < n ; j++){
                    
                    if(arr[j][0] > arr[i][0] && arr[j][1] > arr[i][1]){
                        flag = false;
                        break;  
                    }
                    else continue;  
                }
                if(flag) count++;
            }
            return count;
        }
    }
    

    第二题

    给 定 一 个 数 组 序 列 , 需 要 求 选 出 一 个 区 间 , 使 得 该 区 间 是 所 有 区 间 中 经 过 如 下 计 算 的 值 最 大 的 一 个 : 区 间 中 的 最 小 数 * 区 间 所 有 数 的 和 最 后 程 序 输 出 经 过 计 算 后 的 最 大 值 即 可 , 不 需 要 输 出 具 体 的 区
    间 。 如 给 定 序 列 [ 6 2 1 ] 则 根 据 上 述 公 式 , 可 得 到 所 有 可 以 选 定 各 个 区 间 的 计 算 值


    第二题

    从 上 述 计 算 可 见 选 定 区 间 [ 6 ] , 计 算 值 为 36 , 则 程 序 输 出 为 36 。
    区 间 内 的 所 有 数 字 都 在 [ 0 , 100 ] 的 范 围 内。
    输 入
    第 一 行 输 入 数 组 序 列 个 数 , 第 二 行 输 入 数 组 序 列 。
    输 出
    输 出 数 组 经 过 计 算 后 的 最 大 值 。
    样 例 输 入
    3
    6 2 1
    样 例 输 出
    36
    Hint
    对 于 50 % 的 数 据 , 1 < = n < = 10000 .
    对 于 1 % 的 数 据 , 1 < = n < = 500000 .

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int[] arr = new int[n];
            for(int i = 0; i < n;i++){
                arr[i] = in.nextInt();
            }
            System.out.println(solve(n,arr));
            in.close();
        }
    
        public static long solve(int n, int[] arr) {
            int i,j;
            long max = Integer.MIN_VALUE;
            for(i = 1; i <= n; i++){  //取i个数据组成一个区间
                for(j = 0; j <= n-i ; j++){  //区间范围从数组第j个索引位置开始
                    int min = Integer.MAX_VALUE;
                    int sum = 0;
                    for(int m = j; m < j+i; m++){ //依次获取从第j个索引位置的数据直到第j+i-1个位置的数据
                        min = min < arr[m] ? min:arr[m];
                        sum +=arr[m];
                    }
                    max = max > min*sum ? max : min*sum;
                }
            }
            return max;
        }
    }
    

    第三题

    第三题

    参考文献:

    [1] 2017今日头条网招在线编程题(部分)

    相关文章

      网友评论

          本文标题:2017年今日头条笔试题目

          本文链接:https://www.haomeiwen.com/subject/tvjwfftx.html