11. Container With Most Water

https://www.cnblogs.com/grandyang/p/4455109.html

用双指针向中间滑动,较小的高度就作为当前情况的高度,然后循环找容量的最大值。

不管两个指针中间有多少高度的柱子,只管两头,因为两头的才决定最大容量。

class Solution {
public:
int maxArea(vector<int>& height) {
if(height.empty())
return ;
int res = ;
int begin = ,end = height.size() - ;
while(begin < end){
int h = min(height[begin],height[end]);
res = max(res,(end - begin) * h);
h == height[begin] ? begin++ : end --;
}
return res;
}
};

42. Trapping Rain Water

https://www.cnblogs.com/grandyang/p/4402392.html

本题与11. Container With Most Water不同,11. Container With Most Water是求两个柱子能装的最多水量,这个题是求的所有柱子能装的水量。

依旧可以使用双指针,一个begin指向第一个柱子,一个end指向最后一个柱子。然后相当于维护一个递减的队列,但又不是完全递减,只是说后面遍历到的应该比这个开始的位置少。一旦出现比这个开始位置大,就要重新更新作为比较的对象。

注意,选择对比的是两个柱子中较短的那根柱子。

class Solution {
public:
int trap(vector<int>& height) { int begin = ,end = height.size() - ;
int res = ;
while(begin < end){
int h = min(height[begin],height[end]);
if(h == height[begin]){
int tmp = height[begin];
begin++;
while(begin < end && height[begin] < tmp){
res += tmp - height[begin];
begin++;
}
}
else{
int tmp = height[end];
end--;
while(begin < end && height[end] < tmp){
res += tmp - height[end];
end--;
}
}
}
return res;
}
};

238. Product of Array Except Self

https://www.cnblogs.com/grandyang/p/4650187.html

整体分成左右两个数组进行相乘,这种方式不用两个数组进行存储。

从左向右可以用res[i]就代替前面的乘积,但从右向左就不行了,这个是后res[i]已经是所有的在左侧前方的乘积和,我们还必须计算右侧的乘积和,这个时候用一个变量right来累乘就好了。

其实从左向右也可以用一个变量来累乘。

class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> res(nums.size(),);
for(int i = ;i < nums.size();i++){
res[i] = res[i-] * nums[i-];
}
int right = ;
for(int i = nums.size() - ;i >= ;i--){
res[i] *= right;
right *= nums[i];
}
return res;
}
};

407. Trapping Rain Water II

https://www.cnblogs.com/grandyang/p/5928987.html

class Solution {
public:
int trapRainWater(vector<vector<int>>& heightMap) {
if(heightMap.empty())
return ;
int m = heightMap.size(),n = heightMap[].size();
int res = ,max_height = INT_MIN;
vector<vector<bool>> visited(m,vector<bool>(n,false));
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
for(int i = ;i < m;i++){
for(int j = ;j < n;j++){
if(i == || i == m - || j == || j == n - ){
int index = i * n + j;
q.push(make_pair(heightMap[i][j],index));
visited[i][j] = true;
}
}
}
while(!q.empty()){
int height = q.top().first;
int x = q.top().second / n;
int y = q.top().second % n;
q.pop();
max_height = max(max_height,height);
for(auto dir : dirs){
int new_x = x + dir[];
int new_y = y + dir[];
if(new_x < || new_x >= m || new_y < || new_y >= n || visited[new_x][new_y] == true)
continue;
visited[new_x][new_y] = true;
if(heightMap[new_x][new_y] < max_height)
res += max_height - heightMap[new_x][new_y];
int new_index = new_x * n + new_y;
q.push(make_pair(heightMap[new_x][new_y],new_index));
}
}
return res;
}
private:
vector<vector<int>> dirs{{-,},{,-},{,},{,}};
};

leetcode 11. Container With Most Water 、42. Trapping Rain Water 、238. Product of Array Except Self 、407. Trapping Rain Water II的更多相关文章

  1. LeetCode OJ 238. Product of Array Except Self 解题报告

        题目链接:https://leetcode.com/problems/product-of-array-except-self/ 238. Product of Array Except Se ...

  2. [LeetCode] 11. Container With Most Water 装最多水的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  3. Leetcode 11. Container With Most Water(逼近法)

    11. Container With Most Water Medium Given n non-negative integers a1, a2, ..., an , where each repr ...

  4. LeetCode 11 Container With Most Water(分支​判断问题)

    题目链接 https://leetcode.com/problems/container-with-most-water/?tab=Description   Problem: 已知n条垂直于x轴的线 ...

  5. LeetCode 11. Container With Most Water (装最多水的容器)

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  6. 如何装最多的水? — leetcode 11. Container With Most Water

    炎炎夏日,还是呆在空调房里切切题吧. Container With Most Water,题意其实有点噱头,简化下就是,给一个数组,恩,就叫 height 吧,从中任选两项 i 和 j(i <= ...

  7. LeetCode#11. Container With Most Water

    问题描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ...

  8. Java [leetcode 11] Container With Most Water

    问题描述: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ...

  9. C#解leetcode 11. Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

随机推荐

  1. Android手机测试环境搭建

    Android SDK概念: SDK(software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件的开发工具的集合. ...

  2. dll与exe

    文章:dll与exe的区别 地址:https://blog.csdn.net/qq_26591517/article/details/80389846

  3. K8S集群证书已过期且etcd和apiserver已不能正常使用下的恢复方案

    在这种比较极端的情况下,要小心翼翼的规划和操作,才不会让集群彻底死翘翘.首先,几个ca根证书是10年期,应该还没有过期.我们可以基于这几个根证书,来重新生成一套可用的各组件认证证书. 前期,先制定以下 ...

  4. Django之路——1 Django的简介

    今天我们来学习django,在学习Django之前我们先来了解一下django和web开发中的http协议 1.mvc模型和mtv模型 既然学习Django,那么我们一定要知道web开发中的mvc模型 ...

  5. destoon7.0的商业圈应用于6.0下修改方案

    因为destoon7.0发布了,于是自己作死又下载了7.0,看了看7.0的模板确实比6.0好看多了,所以就打算把7.0的模板应用于6.0,在商业圈上出了一个问题,就是商业圈的圈子7.0调用与6.0不同 ...

  6. Mysql 查询当天、昨天、近7天、一周内、本月、上一月等的数据(函数执行日期的算术运算)

    注:where语句后中的字段last_login_time 替换成 时间字段名 即可 #查询昨天登录用户的账号 ; #查询当天登录用户的账号 ; #查询所有last_login_time值在最后1天内 ...

  7. C 指针常量 和常量指针 指向常量的指针常量的使用

    #include <stdio.h> /* 指针常量 和常量指针 指向常量的指针常量 */ int main() { int a = 100; int b =200; int* const ...

  8. [转] Raspberry Pi 樹莓派使用場合及時機

    在買了 Raspberry Pi 後,到底能拿來做什麼事情呢?有幾個想法一起分享   這裡有初學者教學的影片,非常值得一看. http://www.youtube.com/user/Raspberry ...

  9. 利用nc当作备用shell管理方案.

    ssh 有时候真的就是连不上了,然后是没什么然后了呢. 或者手残改错配置然后重新sshd了. 所以这时候需要备用的远程管理工具.nc是最好的选择,一般服务器都是 内网的,如果跳板机也管理不了呢. 安装 ...

  10. AtCoder Grand Contest 020 (AGC020) E - Encoding Subsets 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/AGC020E.html 前言 真 \(\cdot\) 信仰型动态规划 题解 我们可以采用信仰型动态规划解决此题. 设 \(dp[ ...