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

Java【手撕双指针】LeetCode 11. “盛水最多的容器“, 图文详解思路分析 + 代码

文章目录

  • 前言
  • 一、盛水最多的容器
    • 1, 题目
    • 2, 思路分析
    • 3, 代码展示


前言

各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)

一、盛水最多的容器

1, 题目

OJ链接

在这里插入图片描述


2, 思路分析

最简单的暴力枚举 : 两层 for 循环, 从左往右依次尝试两个数, 最后形成的容积, 时间复杂度为O(N * N), 会超出时间限制

既然暴力枚举不行, 那尝试就使用双指针, 一个 left , 一个 right

根据实际情况分析选择对撞双指针还是快慢双指针, 本题的结果和 “宽度” 有关系, 所以初始时, 尽可能让宽度最大, 这正好是使用 对撞双指针 的机会

而且刚才标注了一句话 : 查找的本质是排除, 查找的本质是排除, 查找的本质是排除 ! ! !

如果每次判断, 都能尽可能多的排除数据, 就能尽可能地提高效率

在这里插入图片描述

如上图所示, 初始时, left 和 right 指针分别定义在数组两端, 进行简单地分析就能判断下一步是 left++ 还是 right–(固定值较大的指针, 让较小的指针向内遍历), 这样就能排除一趟暴力枚举时需要遍历的数据


3, 代码展示

	public int maxArea(int[] height) {int left = 0;int right = height.length - 1;int max = 0;int content = 0;while(left < right){int shorter = Math.min(height[left], height[right]);content = (right - left) * shorter;max = Math.max(max, content);if(height[left] >= height[right]) {right--;}else {left++;}}return max;}   
http://www.lryc.cn/news/134580.html

相关文章:

  • vue3——递归组件的使用
  • 【爬虫练习之glidedsky】爬虫-基础1
  • 计算机视觉入门 1)卷积分类器
  • SpringBoot 配置优先级
  • 钢筋的形变屈服度测量
  • 【BASH】回顾与知识点梳理(三十七)
  • 智慧农场云养猪平台原来是这样的!
  • 【3Ds Max】可编辑多边形“边界”层级的简单使用
  • Rancher-RKE2-安装流程
  • OrienterNet: visual localization in 2D public maps with neural matching 论文阅读
  • iOS导航栏闪屏以及statusBar背景色的更改
  • Centos开启防火墙和端口命令
  • 基于微信小程序的宠物领养平台的设计与实现(Java+spring boot+微信小程序+MySQL)
  • Mongodb基础操作
  • 数据结构与算法:计算机科学的基石
  • 曲线救国 | 双非渣硕的秋招路
  • 气传导耳机怎么样?四款值得入手的气传导耳机推荐
  • HTML <svg> 标签
  • Python随机密码生成。编写程序,在26个字母大小写和10个数字随机生成10个8位密码。
  • 数据结构作业——哈夫曼树
  • Python XML处理中级篇:深入探索lxml库
  • 岩棉革新——洛科威推出NGF新一代岩棉产品
  • 关于 docker 基础题目
  • Skywalking全链路追踪【学习笔记】
  • Sphinx——Python生成API文档
  • 倒计时动效
  • 安卓主板定制_电磁屏/电容屏安卓平板基于MTK联发科方案定制
  • Unity 之 ScreenPointToRay() (将点转换成射线的方法)
  • C++ 线程池
  • 测试框架pytest教程(6)钩子函数hook开发pytest插件