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 }
    心之所愿,永不相忘
  • 相关阅读:
    安装黑苹果的config.plist
    navicat for mysql 导出数据的坑
    js中的深层复制
    js写的一个HashMap
    js前台数据校验
    nginx对上传文件大小的限制
    tomcat用户配置,内存配置,pid配置
    redis安装及使用
    程序端口被占用分析
    zookeeper+dubbo-admin开发dubbo应用
  • 原文地址:https://www.cnblogs.com/zgll/p/15391469.html
Copyright © 2011-2022 走看看