首页 > 其他分享 >力扣—盛水最大的容器—双指针

力扣—盛水最大的容器—双指针

时间:2024-07-07 10:27:20浏览次数:11  
标签:right 盛水 int max ret height 力扣 left 指针

文章目录

题目解析

在这里插入图片描述

解题思路

利用单调性控制其中一个变量,使用双指针控制另一个变量。
我们知道S1(面积)=h(高度)*w(宽度)。由于高度的大小是随机的不可控,所以我们可以尝试控制宽度,定义变量
left和right分别指向数组第一个元素和最后一个元素,此时可以得到S1=(right-left)*fmin(height[left],height[right])
当宽度向中间收缩时成不断递减的趋势,所以要得到最大的S必须要求高度尽可能的大,此时就需要舍弃
(height[left],height[right])中较小的那个高度,得到新的S2和S1比较取较大值。

代码实现

C语言实现

int maxArea(int* height, int heightSize) 
{
    int left=0;
    int sum=0;
    int right=heightSize-1;
    int max=0;
    while(left<right)
    {
        int sum=(right-left)*fmin(height[left],height[right]);
        if(height[left]<height[right])
        {
            left++;
        }
        else
        {
            right--;
        }
        max=fmax(sum,max);
    }
    return max;
}

Java实现

class Solution {
    public int maxArea(int[] height) 
    {
      int left=0;
      int right=height.length-1;
      int ret=0;
      while(left<right)
      {
        int v=(right-left)*Math.min(height[left],height[right]);
        if(height[left]<height[right])
        {
            left++;
        }
        else
        {
            right--;
        }
       ret=Math.max(ret,v);
      }
      return ret;
    }
}

感谢您的阅读,欢迎留言评论。

标签:right,盛水,int,max,ret,height,力扣,left,指针
From: https://blog.csdn.net/2403_82759827/article/details/140242221

相关文章

  • 相向双指针
    167.两数之和Ⅱ-输入有序数组classSolution{public:vector<int>twoSum(vector<int>&numbers,inttarget){vector<int>ans;intn=numbers.size();intl=0,r=n-1;while(l<r){if((......
  • 力扣第7题:整数反转 字符串函数综合运用(C++)
    给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例3:......
  • 力扣第22题:括号生成 深度优先搜索(DFS)和它的优化(C++)
    数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]思路递出去,再归回来,是为递归。DFS算法是利用递归思想的一种搜索算法。想象一个矿井,从地面到井底有多层......
  • 力扣第6题:Z字形变换 交替V和Λ规律法(C++)
    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:PAHNAPLSIIGYIR之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。......
  • 3101.力扣每日一题7/6 Java(接近100%解法)
    博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • (十九)指针与迭代器
    前言本来这次我想写关于进制的帖子的,但是感觉指针在为后面的很多内容做铺垫,所以我先把关于指针的帖子写了。况且我知道有很多小伙伴现在没有学习指针,点个赞吧,求求啦!正文指针还记得我们定义普通变量的时候用的是TypVar=Val;,而指针在之前我们讲过,分别出现在这两个帖......
  • 【力扣】每日一题—第217题,存在重复元素
    目录题目:开始思路:更改思路:上代码:题目:给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。开始思路:暴力求解两重for循环直接出结果,但是超时了!!!超时了命苦!!!更改思路:先排序后遍历成功了哎,不过如此,嘿嘿嘿......
  • 【力扣】每日一题—第242题,有效的字母异位词
    目录题目:开始思路:最后思路:最终代码:题目:给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。注意:若*s*和*t*中每个字符出现的次数都相同,则称*s*和*t*互为字母异位词。开始思路:判断字母长度,不相等直接返回false,相等再将两个字符串排......
  • 力扣-283移动零-双指针
    力扣-283移动零-双指针—、题目解析二、解题思路三、代码实现—、题目解析给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]二、......
  • 第18节 指针与数组
    文章目录第18节指针与数组1.一维数组与指针2.指针与字符串第18节指针与数组1.一维数组与指针►C++程序员更偏爱使用指针来访问数组元素,这样做的好处是运行效率高、写法简洁。►1.一维数组的地址 ►数组由若干个元素组成,每个元素都有相应的地址,通过......