力扣42接雨水 11盛水最多的容器

发布时间:2026/10/28 17:58:23
力扣42接雨水 11盛水最多的容器 42.接雨水输入height [0,1,0,2,1,0,1,3,2,1,2,1]输出6解释上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图在这种情况下可以接 6 个单位的雨水蓝色部分表示雨水。思路如下首先确定双指针解法因此有left,right两个变量。left,right_max为最大值ans为最终答案left 不大于 right时无限循环二者向中心逼近。height[left]大于right时变动left即短的一边长的一边留下。left_max与height[left]比较如果height[left]大于max则替换max成为新的墙否则为ans加新的left_max - height[left]left 换到下一个柱子right同理可得。class Solution { public int trap(int[] height) { int left 0,right height.length - 1; int left_max 0,right_max 0; int ans 0; while(left right){ if(height[left] height[right]){ if(left_max height[left]){ left_max height[left]; } else{ ans left_max - height[left]; } left; } else{ if(right_max height[right]){ if(right_max height[right]){ right_max height[right]; } else{ ans right_max - height[right]; } } right--; } } return ans; }11.盛水最多的容器给定一个长度为n的整数数组height。有n条垂线第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。求面积宽度为right - left;height 为 left和right中更小的那个。area为两者乘积ans取最大值class Solution { public int maxArea(int[] height) { int left 0,right height.length -1; int ans 0,area 0; int height1 0; while(left right){ int width right - left; height1 Math.min(height[left],height[right]); area height1 * width; ans Math.max(area,ans); if(height[left] height[right]){ left 1; } else{ right - 1; } } return ans; } }3.无重复字符的最长子串示例 1:输入:s abcabcbb输出:3解释:因为无重复字符的最长子串是 abc所以其长度为 3。注意 bca 和 cab 也是正确答案。示例 2:输入:s bbbbb输出:1解释:因为无重复字符的最长子串是 b所以其长度为 1。滑动窗口解法有left right两个指针新建一个HashSet用于存储字符进行比较当right小于 字符串长度时无限循环直到等于即遍历结束当set1中不包含时加入set1 求得ans取max 并且right扩展滑动窗口存在时代表重复remove掉left left即窗口向右缩小一格。class Solution { public int lengthOfLongestSubstring(String s) { int left 0,right 0; int ans 0; SetCharacter set1 new HashSet(); while(right s.length()){ while(set1.contains(s.charAt(right))){ set1.remove(s.charAt(left)); left; } set1.add(s.charAt(right)); ans Math.max(ans,right - left 1); right; } return ans; } }439.找到字符串中所有异位词class Solution { public ListInteger findAnagrams(String s, String p) { ListInteger ans new ArrayList(); int n s.length(),pk p.length(); if(n pk){ return ans; } //初始化 int[] cnts new int[26]; for(int i 0;i pk;i){ cnts[s.charAt(i) - a]; cnts[p.charAt(i) - a]--; } if(allzero(cnts)) ans.add(0); //偏移 for(int i pk;i n;i){ cnts[s.charAt(i) - a]; cnts[s.charAt(i - pk) - a]--; if(allzero(cnts)) ans.add(i- pk 1); } return ans; } private boolean allzero(int[] cnts){ for(int c :cnts ){ if (c ! 0){ return false; } } return true; } }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询