zoukankan      html  css  js  c++  java
  • 金山最后一个笔试题--容器盛水问题

    链接:https://www.nowcoder.com/questionTerminal/f92929ec6e5642a690e7c197b0c40e38?answerType=1&f=discussion

    给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个容器,请返回容器能装多少水。
    具体请参考样例解释
    输入描述:
    第一行一个整数N,表示数组长度。

    接下来一行N个数表示数组内的数。
    输出描述:
    输出一个整数表示能装多少水。


    直接看的题解:利用双指针,每次挪动指针都能确定一个位置的盛水量。
     1 // 最主要的就是确定盛水区间,虽然没办法短时间内理论证明,但这样应该是对的   
     2 // 从后到前,从前到后二次遍历,遇到比较小的,置为0,遇到比较大的,更新值  =》》很遗憾,只能通过40%的用例
     3 // 还是看题解吧
     4 #include<vector>
     5 #include<iostream>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int N;
    11     cin >> N;
    12     long long sum = 0;
    13     vector<int> arr(N);
    14     for (int i = 0; i < N; ++i)
    15     {
    16         cin >> arr[i];
    17     }
    18     auto l = arr.begin();//左指针
    19     auto r = --arr.end();//右指针
    20     int lower = 0;
    21     int level = 0;
    22     while (l < r)
    23     {
    24         lower = *l < *r ? *l++ : *r--;
    25         level = level>lower ? level : lower;
    26         sum += level - lower;
    27     }
    28     cout << sum << endl;
    29 }
    心之所愿,永不相忘
  • 相关阅读:
    Java WebSocket通信Demo
    JAVA FTP/SFTP 上传下载文件
    SpringMVC+MyBatis 事务中 基于注解的声明式事务
    Java 调用支付宝接口
    linux安装Tomcat
    使用cxf发布restful的webservice
    restful的webservice
    oracle时间比较和分页查询
    jenkins问题
    linux安装jenkins
  • 原文地址:https://www.cnblogs.com/zgll/p/15391469.html
Copyright © 2011-2022 走看看