当前位置: 首页 > article >正文

[双指针] 盛最多水的容器, 有效三角形的个数, 和为s的两个数

目录

  一. 11. 盛最多水的容器 - 力扣(LeetCode)

 二. 611. 有效三角形的个数 - 力扣(LeetCode)

三. LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)


一. 11. 盛最多水的容器 - 力扣(LeetCode)

给定一个长度为 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
    public int maxArea(int[] height) {
        // 容积 = 短板长度 * 长短板之间的距离
        // 双指针: 长短板之间距离减小, 那么短板长度需要增大, 容积才会增大 否则, 容积一定减小
        int left = 0;
        int right = height.length - 1;
        int maxVal = 0; // 记录最大容积
        while (left < right) {
            int tmpVal = Math.min(height[left], height[right]) * (right - left);
            if (tmpVal > maxVal) {
                maxVal = tmpVal;
            }
            if (height[left] > height[right]) {
                right--;
            } else {
                left++;
            }
        }
        return maxVal;
    }

 二. 611. 有效三角形的个数 - 力扣(LeetCode)

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

示例 1:

输入: nums = [2,2,3,4]
输出: 3
解释:有效的组合是: 
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

示例 2:

输入: nums = [4,2,3,4]
输出: 4

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
    public int triangleNumber(int[] nums) {
        // 有效三角形: 两短边之和 > 第三长边
        Arrays.sort(nums); // 升序数组
        // 双指针
        int n = nums.length - 1; // 长边
        int left = 0;
        int right = n - 1; // 两短边
        int ret = 0;
        while (n >= 2) {
            left = 0;
            right = n - 1;
            while (left < right) {
                if (nums[left] + nums[right] > nums[n]) { 
                    ret += right - left;
                    right--;
                } else {
                    left++;
                }
            }
            n--;
        }
        return ret;
    }

三. 11. 盛最多水的容器 - 力扣(LeetCode)

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。

示例 1:

输入:price = [3, 9, 12, 15], target = 18
输出:[3,15] 或者 [15,3]

示例 2:

输入:price = [8, 21, 27, 34, 52, 66], target = 61
输出:[27,34] 或者 [34,27]
    public int[] twoSum(int[] price, int target) {
        // 双指针(有序数组)
        // left + right = target
        int left = 0;
        int right = price.length - 1;
        while (left < right) {
            if (price[left] > target - price[right]) {
                right--;
            } else if (price[left] < target - price[right]) {
                left++;
            } else {
                int[] ret = {price[left], price[right]};
                return ret;
            }
        }
        return null;
    }


http://www.kler.cn/a/379736.html

相关文章:

  • Linux云计算 |【第五阶段】CLOUD-DAY6
  • 为啥学习数据结构和算法
  • 钉钉向广告低头
  • 音视频入门基础:FLV专题(22)——FFmpeg源码中,获取FLV文件音频信息的实现(中)
  • 鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)
  • CentOS 7 安装 ntp,自动校准系统时间
  • uniapp 如何修改 返回按钮(左上角+物理按钮+侧滑)触发的返回事件
  • 【Docker系列】指定系统平台拉取 openjdk:8 镜像
  • 结构体对齐,位段
  • 支持 Mermaid 语言预览,用通义灵码画流程图
  • centos7 kafka高可用集群安装及测试
  • 【Git】SSH密钥
  • json和pb的比较
  • 第八篇: 通过使用Google BigQuery进行数据批量和自动化处理
  • 【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。
  • unity游戏开发之--人物打怪爆材料--拾进背包的实现思路
  • 如何实现PHP安全过滤
  • AI赋能财务管理,AI技术助力企业自动化处理财务数据
  • .NET 开发人员实用NuGet 包,加快开发速度
  • 【深度学习】多分类任务评估指标sklearn和torchmetrics对比
  • 策略模式(C++)三分钟读懂
  • Naive UI 选择器 Select 的:render-option怎么使用(Vue3 + TS)(鼠标悬停该条数据的时候展示全部内容)
  • Java项目实战II基于Java+Spring Boot+MySQL的编程训练系统(源码+数据库+文档)
  • Windows密码的网络认证---基于挑战响应认证的NTLM协议
  • asynDriver-6-端口驱动
  • MQTT自动发送消息工具(自动化测试MQTT)