• 今日头条编程题


    第一题:

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

    如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。

    链接:https://www.nowcoder.com/questionTerminal/f652bf7904bf4905804fa3bc347fdd2a
    来源:牛客网


    输入描述:
    第一行输入点集的个数 N, 接下来 N 行,每行两个数字代表点的 X 轴和 Y 轴。
    对于 50%的数据,  1 <= N <= 10000;
    对于 100%的数据, 1 <= N <= 500000;


    输出描述:
    输出“最大的” 点集合, 按照 X 轴从小到大的方式输出,每行两个数字分别代表点的 X 轴和 Y轴。
    示例1

    输入

    5
    1 2
    5 3
    4 6
    7 5
    9 0

    输出

    4 6
    7 5
    9 0
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <bits/stdc++.h>
     4 using namespace std;
     5 
     6 struct Point
     7 {
     8     int x,y;
     9 };
    10 Point points[500001];
    11 bool cmp(Point a,Point b)
    12 {
    13     return a.y>b.y;
    14  } 
    15 
    16 int main()
    17 {
    18     int n;
    19     cin>>n;
    20     for(int i=0;i<n;i++)
    21     {
    22         scanf("%d%d",&points[i].x,&points[i].y);
    23     }
    24     //按照y升序,x降序排列
    25     sort(points,points+n,cmp);
    26     Point  mark;
    27     mark.x=points[0].x;
    28     mark.y=points[0].y;
    29     printf("%d %d
    ",mark.x,mark.y);
    30     for(int i=0;i<n;i++)
    31     {
    32         if(points[i].x>mark.x)
    33         {
    34             mark.x=points[i].x;
    35             mark.y=points[i].y;
    36             printf("%d %d
    ",mark.x,mark.y);
    37         }
    38     }
    39 
    40     /*int maxx = point[n-1].x;
    41     for(int i=n-2;i>=0;i--)
    42     {
    43         if(points[i].x>maxx)
    44         {
    45             printf("%d %d",points[i].x,points[i].y);
    46             maxx=points[i].x;
    47         }
    48      } */
    49      return 0;
    50  } 
    View Code

    链接:https://www.nowcoder.com/questionTerminal/e6e57ef2771541dfa2f1720e50bebc9a
    来源:牛客网
    第二题:

    给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个:

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

     

    [6] = 6 * 6 = 36;

    [2] = 2 * 2 = 4;

    [1] = 1 * 1 = 1;

    [6,2] = 2 * 8 = 16;

    [2,1] = 1 * 3 = 3;

    [6, 2, 1] = 1 * 9 = 9;

     

    从上述计算可见选定区间 [6] ,计算值为 36, 则程序输出为 36。

    区间内的所有数字都在[0, 100]的范围内;

    输入描述:
    第一行输入数组序列长度n,第二行输入数组序列。
    对于 50%的数据,  1 <= n <= 10000;
    对于 100%的数据, 1 <= n <= 500000;


    输出描述:
    输出数组经过计算后的最大值。
    示例1

    输入

    3
    6 2 1

    输出

    36
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 using namespace std;
     5 const int maxn = 5e5+10;
     6 int a[maxn];
     7 int n;
     8  
     9 int main()
    10 {
    11     while(scanf("%d",&n) ==1)
    12     {
    13         for(int i=1;i<=n;i++)
    14         {
    15             cin>>a[i];
    16         }
    17         int Max1 = 0;
    18         for(int i=1;i<=n;i++)
    19         {
    20             int Min1 = a[i];
    21             int sum  = a[i];
    22             for(int j=i-1;j>=1;j--)
    23             {
    24                 if(a[j]>=Min1)
    25                 {
    26                     sum +=a[j];
    27                 }
    28                 else break;
    29             }
    30             for(int j=i+1;j<=n;j++)
    31             {
    32                 if(a[j]>=Min1)
    33                 {
    34                     sum +=a[j];
    35                 }
    36                 else break;
    37             }
    38             Max1 = max(Max1,sum*Min1);
    39         }
    40         cout<<Max1<<endl;
    41     }
    42     return 0;
    43 }
    View Code
    转载请说明出处!
  • 相关阅读:
    webapi 中使用 protobuf
    apache httpclient cache 实现可缓存的http客户端
    编译nginx时提示undefined reference to 'pcre_free_study' 的问题及解决
    深入理解JVM内存回收机制(不包含垃圾收集器)
    从JDK源码理解java引用
    Buffer的创建及使用源码分析——ByteBuffer为例
    二叉树的子结构、深度以及重建二叉树
    数据结构——树与二叉树的遍历
    Java NIO之Buffer的使用
    Java多线程之synchronized详解
  • 原文地址:https://www.cnblogs.com/zengshangzhi/p/9021234.html
Copyright © 2020-2023  润新知