1.盛水最多的容器

思路如下所示:

设置两个指针,从两边向中间靠拢,每次移动height较小的一端。

代码如下所示:

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param height int整型vector * @return int整型*/int maxArea(vector<int>& height) {// write code hereif(height.size()<0){return 0;}int res=0;int left=0, right=height.size()-1;while(left<right){res=max(res, min(height[left], height[right])*(right-left));if(height[left]>height[right]){right--;}else{left++;}}return res;}
};

2.接雨水问题

双指针

这题其实和上边那道差不太多。首先给定一个区间,我们要知道,决定这个区间每个值对应的水量是和左右边界谁小决定的。

因此,我们维护一个maxL和maxR记录包含左右区间的最大值,用于计算水量,而计算的过程是我们维护一个[left, right]的双指针,由两侧向中间靠拢,每次将小的移动,因为这样我们才能计算出最大的接水量,中间的高度可能更高。

代码如下所示:

class Solution {
public:/*** max water* @param arr int整型vector the array* @return long长整型*/long long maxWater(vector<int>& arr) {if(arr.size()==0){return 0;}long long res=0;int left=0, right=arr.size()-1;int maxL=0, maxR=0;while(left<right){maxL=max(maxL, arr[left]);maxR=max(maxR, arr[right]);if(maxR>maxL){res += maxL-arr[left++];}else{res += maxR-arr[right--];}}return res;}
};

单调栈

这题也很适合用单调栈来解决,单调栈即维护一个单调序列的栈,这里我们维护一个递减的下标栈。

这里单调栈模拟的是对于一个区间一层一层加水的过程。具体可以参考leetcode上面的思路:

力扣

代码如下所示:

class Solution {
public:/*** max water* @param arr int整型vector the array* @return long长整型*/long long maxWater(vector<int>& arr) {if(arr.size()==0){return 0;}long long res=0;stack<int> st;for(int i=0;i<arr.size();++i){while(!st.empty() && arr[i]>arr[st.top()]){int top=st.top();st.pop();//说明之前的都比他小 这个高度的对应位置装不了水if(st.empty()){break;}int left=st.top();int width=i-left-1;int height=min(arr[left], arr[i])-arr[top];res+=width*height;}st.push(i);}return res;}
};

牛客网:接雨水的双指针问题相关推荐

  1. [C++] 牛客网:合并两个有序的数组

    主要是体验一下牛客网里的核心代码模式到底是怎么弄的..还有C++这个东西平常用的太少了,试一试. 以外的还体验到了sort()函数的使用. 来源:牛客网 题目链接:合并两个有序的数组 知识点:数组.双 ...

  2. 【牛客网笔试整理】美团点评 笔试整理

    链接:https://www.nowcoder.com/questionTerminal/29d1622d47514670a85e98a1f47b8e2d 来源:牛客网 已知一种新的火星文的单词由英文 ...

  3. 《牛客网 剑指Offer前20题》

    <剑指Offer> 牛客网 前20道题 前言知识 面试题1:二维数组中的查找 面试题2:二维数组中的查找 面试题3:从头到尾打印链表 面试题4:重建二叉树 ***** 面试题5:两个栈实现 ...

  4. 【牛客网面试必刷TOP101】链表篇(一)

    链表 一.前言 二.学习刷题网站 1.推荐的原因 三.刷题 <1>反转链表 递归法 <2>链表内指定区间反转 ①头插法 ②递归法 <3>链表中的节点每k个一组翻转 ...

  5. 字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取

    牛客网--字节跳动面试题--特征提取 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:特征提取 来源:牛客网 题目 ...

  6. 牛客网:为什么不能将实数作为 HashMap 的 key?

    欢迎关注方志朋的博客,回复"666"获面试宝典 1.起因 让我关注到这一点的起因是一道题:牛客网上的max-points-on-a-line 题目是这么描述的: Given n p ...

  7. 牛客网在线编程----算法入门篇

    标题本篇博文主要是记录下自己的在线编程情况,初次练习,有的算法还待改进,大家有需要可以去牛客网上面多练练! 有需戳–>牛客网在线编程 NC65.题目描述 大家都知道斐波那契数列,现在要求输入一个 ...

  8. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  9. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制 ...

  10. 牛客网 2018年全国多校算法寒假训练营练习比赛(第三场)D.小牛vs小客-博弈

    菜哭... D.小牛vs小客 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://ww ...

最新文章

  1. 《LeetCode力扣练习》第226题 翻转二叉树 Java
  2. 成功解决AttributeError: module 'tensorflow' has no attribute 'histogram_summary'
  3. CentOS7搭建lamp环境
  4. 在python中模块可以封装_python 制作python包,封装成可用模块教程
  5. LeetCode 1680. 连接连续二进制数字(位运算)
  6. 我有一个域名_一个域名可以绑定几个网站?域名解析多少子域名?
  7. PHP正则表达式详解(三)
  8. 动态规划1——生产线调度问题(Dynamic Programming)
  9. [Jmeter][基础]Jmeter连接IMPALA
  10. Android studio 六大基本布局详解
  11. 【课程笔记】南大软件分析课程—16课时完整版
  12. VirtualBox 教程
  13. yocto linux 内核源码,利用Bitbake、Poky、Yocto、OpenEmbedded编译生成车规AGL Linux
  14. 随机漫步python程序
  15. E - Alarm Clock (尺取法)
  16. svg图片调整大小和颜色
  17. 探索C++虚函数在g++中的实现
  18. 记录解决windows XP启动加载个人设置慢的问题
  19. python 操作word 替换字符串为图片_用python将.docx文件中的字符串替换为jpg
  20. 计算机病毒 两大传播途径,计算机病毒的传播途径

热门文章

  1. 记录安卓开发的好网站
  2. 一个团购网站运营总监的自白
  3. 网络安全 - 网址大全
  4. matlab程序员得浪漫,程序员也懂浪漫,表白代码,你值得拥有
  5. 编译android工程提示error processing kotlin-stdlib-1.6.0.jar
  6. 如何用人工智能免费抠除任意视频背景?
  7. 虾米音乐android无法登录,虾米音乐将于2月5日关停!3月5日以后无法再登录
  8. Cannot resolve javax.media:jai_core:1.1.3(pdf文件转换为图片的依赖出错)
  9. 【YOLOv2原文+翻译】YOLO9000: Better, Faster, Stronger
  10. flink遇到的错误以及处理