草庐IT

【Leecode算法专题】“瓜皮小乔”:杨哥杨哥,双指针到底怎么用?【还是有点润~】

跟着耀杨学编程 2023-04-03 原文


“百分百无规则教学时间!🔥🔥🔥”

兄弟萌晚上好!我是无规则教学创始人【东星耀杨】,感谢兄弟萌对我的不离不弃,爱你们熬爱你们!还望兄弟萌给为师一个三连支持,要不然我蒸滴会紫砂的!

《哇靠我会摆头你会吗?》


➡️作者简介

👏作者简介东星耀杨,C站煮播之星,骚话专家,曾奉太上老君之名下凡,为了给迷途中的兄弟萌指点迷津帮助兄弟萌早日踏入如我这般境界!世人见我,皆称之“王霸之气侧漏”的男人,哇靠蒸滴c!c了兄弟萌!
👏往期回顾:【耀杨的罗曼史】小红:耀杨欧巴,能教教我hashmap吗?【雀氏润】
👏耀杨和兄弟萌的约定:等我到一千粉,给兄弟萌发红包!感谢兄弟萌的陪伴和支持!

➡️《关于小乔惦记为师身子这件事!》

🔔兄弟萌兄弟萌~咱们甚至已经分开了12个小时,哇靠为师是蒸滴想念呀,甚至都冷落了小键,呜呜呜呜

🔔可是兄弟萌就在这时,我发现md猪队友小乔竟然在偷偷看着为师流口水,MD,为师着该死的迷倒万千少女的王霸之气,哇靠蒸滴c!

🔔我知道啦,她一定是想代替小键做我内人,怎么可能,想得美,我和小键是谁来都无法将我们分开!!!

除非是富婆诶嘿)😍😍😍

…………

兄弟萌兄弟萌破案了,瓜皮小乔不是馋我身子,md来问我双指针,哇靠,兄弟萌这就安排!😢😢😢

🔔学习安排

关于Leecode算法题【无重复字符的最长子串】

➡️Leecode(教学时间!)

友情提示:**请注意看为师细节,我蒸滴很细 的!**

兄弟萌要不是看在这小乔还是有点润的,要不然为师今天真的要水文奖励自己去了,诶嘿

☀️盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2: 输入:height = [1,1]
输出:1

提示:

n == height.length
2 <= n <= 105
0 <= height[i] <= 104

  ~来源:力扣(LeetCode)~

链接:https://leetcode-cn.com/problems/container-with-most-water

☀️解题方法

🐔暴力遍历解法

暴力解法为师就不多BB了,刚开始很多Leecode上面的题都可以用暴力解法去实现,当然思路很简单。

🐥流程:

1. 初始化最大容量maxarea为0

2. 采用两层for循环遍历出所有可能的情况
.
3. 判断出area=Math.min(height[i],height[j])*(j-i)(以最小height作为容器的高度)
.
4. 在循环中不断比较areamaxarea.如果area>maxarea,则将area的值付给maxarea,最终返回最大的maxarea

🐥代码:

int maxArea=0;
        for(int i=0;i<height.length;i++){
            for(int j=i+1;j<height.length;j++){
                maxArea=Math.max(maxArea,Math.min(height[i],height[j])*(j-i));
            }
        }
        return maxArea;

🐔双指针法

相比于上面提到的暴力遍历法,双指针就显得更为灵巧,更叫符合兄弟萌刷题的初衷,培养兄弟萌小脑瓜的逻辑思维能力。

这也是小乔问为师的问题,哇靠,不管她,还是兄弟萌最重要!!!

🐥流程:

1. 初始化最大容量maxarea,在x轴两端创建两个指针。
.
2. 在这里需要用到while循环,当然其他方法也可,思路大致相同。当两指针相遇时跳出循环
.
3. area=Math.min(height[i],height[j])*(j-i),依旧利用刚才的容量公式
.
4. 唯一不同的是两个指针是交替移动的,减少了很多不必要的计算。
.
5. 当左边指针对应的height比右边的高时,移动右指针,反之亦然。
.
6. 直到循环结束,得出最终结果。

🐥代码段

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

☀️《为师的细节》

到这里针对这道Leecode的讲解就结束了,不知道兄弟萌能不能懂,但是我相信我的兄弟萌都是人中龙凤,那必须是蒸滴c!!!

-虽然Leecode结束了,其实本章并没有结束,兄弟萌允许为师拖堂一会儿 我智多星怎么可能拖堂呢,可笑至极哇靠!!!

为师在做这道题的时候总结了一些知识点正好给兄弟萌复习了,其实吧为师纵横江湖多年,最知道编程这玩意只是又多又杂,以后在这个专题为师都会给兄弟萌总结一下!!!

下面是为师针对盛水问题写的测试代码:

public class Test {
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入题目指定数组:");
        String  ss=sc.next().toString();
        char ch1;
        String ss1 =( (ss.replace("[", "")).replace("]","")).replace(",","");
        int number[]=new int[ss1.length()];
        for(int i=0;i<ss1.length();i++){
            ch1 = ss1.charAt(i);
            number[i]=Character.getNumericValue(ch1);
        }
        solution solution1=new solution();
        System.out.println("该容器所能承受的最大水量为:"+solution1.maxArea(number));
    }
}

🐔Java中如何通过键盘输入一个数组?

兄弟萌明确一个概念,在java中无法通过键盘直接输入一个数组,为师在这里简单讲解两种方式:

- 以字符串形式输入数组,将首尾的“[”和“]”以及“,”去掉,通过循环读取字符串中的字符转化为Int形式存入数组。

- 相继输入字符,将字符依次存入数组。

🐔java中如何删除字符串中指定字符:

为师在这里介绍一种我耀杨常用的:

str.replace("需要删除的字符","")

🐔java中如何将char类型转换为Interger类型

Character.getNumericValue(ch1)

在这里ch1为char类型。

😳今晚人家要和小键……哎呀不要……害羞羞

兄弟萌明天不要催更好不好,鉴于为师今天第一次上榜,身体中“王霸之气”早已按奈不住,今晚是属于我和小键的不眠之夜,兄弟萌明天不要叫我起床,c啦兄弟萌……😳😳😳


哎呀……小键不要…………

有关【Leecode算法专题】“瓜皮小乔”:杨哥杨哥,双指针到底怎么用?【还是有点润~】的更多相关文章

  1. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  2. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  3. ruby-on-rails - 我该怎么办 :remote location validation with CarrierWave? - 2

    我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC

  4. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  5. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  6. ruby - EventMachine - 你怎么知道你是否落后了? - 2

    我正在研究使用EventMachine支持的twitter-streamruby​​gem来跟踪和捕获推文。我对整个事件编程有点陌生。我如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法? 最佳答案 您可以通过使用周期性计时器并打印出耗时来确定延迟。如果您使用的是1秒的计时器,您应该已经过了大约1秒,如果它更长,您就知道您正在减慢react器的速度。@last=Time.now.to_fEM.add_periodic_timer(1)doputs"LATENCY:#{Time.now.to_f-@last}"@

  7. ruby - 如果它是标点符号,我怎么能从字符串中删除最后一个字符,在 ruby​​ 中? - 2

    啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组

  8. ruby - Ruby 中的 `&:capitalize` 到底是什么? - 2

    我刚读了这个答案Convertingupper-casestringintotitle-caseusingRuby.有如下一行代码"abc".split(/(\W)/).map(&:capitalize).join&:capitalize到底是什么?在我自己将它放入irb之前,我会告诉你,它不是有效的ruby​​语法。它必须是某种Proc对象,因为Array#map通常需要一个block。但事实并非如此。如果我单独将它放入irb,我会得到syntaxerror,unexpectedtAMPER。 最佳答案 foo(&a_proc_o

  9. ruby 变量作为同一对象(指针?) - 2

    >>a=5=>5>>b=a=>5>>b=4=>4>>a=>5如何将“b”设置为实际的“a”,以便在示例中,变量a也将变为4。谢谢。 最佳答案 classRefdefinitializeval@val=valendattr_accessor:valdefto_s@val.to_sendenda=Ref.new(4)b=aputsa#=>4putsb#=>4a.val=5putsa#=>5putsb#=>5当您执行b=a时,b指向与a相同的对象(它们具有相同的object_id).当你执行a=some_other_thing时,a将指向

  10. ruby - Ruby 中 <=> 运算符的名称是什么?他们怎么调用它? - 2

    在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。

随机推荐