IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode-11-盛水最多的容器 -> 正文阅读

[数据结构与算法]LeetCode-11-盛水最多的容器


题目

在这里插入图片描述
题目链接

一、解题思路

这题其实就是要求那两个点的面积最大。有两种解题思路。

1. 暴力破解

通过两层循环遍历任意两点的所有组合情况,然后求出两点的面积值,然后取最大值。
这种方法是最容易想到的。但是当我们使用这种方法提交上去时,会出现超时错误。不要问我为什么!!!懂得都懂。所以我们要通过一种要想出一种时间复杂度更低的方法。

2.双指针法

首先双层循环时肯定不行的,所以我们就来试试单层循环。单层循环我们要获取最大的面积我们首先要确定如何遍历。这点很关键!!!我们不能再向之前双层循环从头遍历到尾。单层循环我们需要通过从两头开始遍历。那这就产生了一种限制。我们每次往中间移的话长度都是再变小!!!然后我们又不希望要获取面积的慢慢随着长度的变小而变小,所以我们需要让我们的高度变高。而高度是由较小的高度来决定,所以我们要让高度变大,只需要让高度较小的一番往中间移。当两条线重合或者超过的时候就遍历完了。

二、方法代码

//暴力破解
 public int maxArea(int[] height) {

    int maxArea = 0;
   
    for (int i = 0; i < height.length - 1; i++) {
      for (int j = i + 1; j < height.length; j++) {
        int largeHeight = height[i] > height[j] ? height[j] : height[i];
        int area = largeHeight * (j - i);
        System.out.println();
        if (area > maxArea) {
          maxArea = area;
        }
      }
      //
    }
    return maxArea;
  }

///双指针法
 public int maxArea(int[] height) {

    int maxArea = 0;
    int i = 0;
    int j = height.length - 1;
    for (; i < j; ) {
      int area;
      if (height[i] <= height[j]) {
        area = height[i] * (j - i);
        i++;
      } else {
        area = height[j] * (j - i);
        j--;
      }
      if (maxArea < area) {
        maxArea = area;
      }
    }
    return maxArea;
  }

总结

这题的暴力破解法其实很多人应该都可以想得到,比较难想到得是第二种,这里很巧妙的利用随着直线不断往中间靠拢,长度在不断的减小,而我们不想让面积随着长度得较小而较小,所以就需要高度不断增加,所以我们每次都要移动长度较小的一方,已达到长度得增加,从而可能产生面积得增长。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:44:57  更:2021-07-24 11:46:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:41:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码