| |
|
开发:
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 Container With Most Water -> 正文阅读 |
|
[数据结构与算法]leetcode 11 Container With Most Water |
原题链接:Container With Most Water - LeetCode 题目Given Notice that you may not slant the container. Example 1:
Example 2:
Example 3:
Example 4:
Constraints:
解法1首先能想到的是,这里的容器水面积等于长度*宽度,宽度是两条线之间距离(j-i),高度是两条线中短线的高度(min(height[i], height[j]))。 遍历每两条线可以暴力破解这道题,但是时间复杂度为O(n^2)。 解法2可以观察到,如果从两边的线开始向内移动的话,因为宽度在变小,唯一可能让面积更大的是让高度更高。而短线和任意一条线组成容器的高度都不可能让高度更高,所以让指向短线的指针向内移动。 举个例子来说,如果height[i] < height[j],那么对于i和j之间的任意下标k,min(height[i], height[k]) <= height[i]都成立,所以i和k组成的面积不可能大于i和j组成的容器,即min(height[i], height[k])*(j-k) <= height[i]*(j-i)。这时可以将i加1来略过这些无用的组合。 这种解法的时间复杂度为O(n)。
解法2优化还有个很细节的点可以优化,就是当height[i] == height[j]时,可以同时让i加1和j减1。因为这时i和k组成的面积不可能大于i和j组成的容器,j和k组成的面积也不可能大于i和j组成的容器。 时间复杂度没有变,还是O(n)。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 0:37:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |