《八月算法》——双指针

前言

        欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
        今天是新的开始 双指针 🔥
在这里插入图片描述

一、练习题目

        11. 盛最多水的容器
        1346. 检查整数及其两倍数是否存在

二、算法思路

  • 1、11. 盛最多水的容器:🔥经典双指针。
  • 2、1346. 检查整数及其两倍数是否存在:🔥🔥稍微有点绕,由于数组可能出现负数的情况,需要分类讨论。

三、源码剖析

// 11. 盛最多水的容器
class Solution {
public:
    int maxArea(vector<int>& height) {
        int l = 0, r = height.size() - 1; //(1)
        int ans = 0;
        while (l < r)
        {
            int tmp = min(height[l], height[r]) * (r - l); //(2)
            ans = max(ans, tmp);
            if(height[l] <= height[r]) { //(3)
                ++l;
            } else
                --r;
        }
        return ans;
    }
};
  • 1、初始化双指针;
  • 2、这里求的就是能盛多少水,高度是由于最短的那个木板决定,乘上长度(即下标相减)所得就是能盛水的面积;
  • 3、左边的板短,则左指针右移,找长板;反之右指针左移。
// 1346 检查整数及其两倍数是否存在
class Solution {
public:
    bool checkIfExist(vector<int>& arr) {
        sort(arr.begin(), arr.end());
        for (auto i = arr.begin(), j = arr.begin(); i != arr.end(); ++i) {
            while (j != arr.end() && *i * 2 > *j)
                ++j;
            if (j != arr.end() && i != j && *i * 2 == *j)
                return true;
        }
        return false;
    }
};
  • 1、i指针去遍历x,j指针去遍历2x即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值