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. Linux postfix配置方法

    第七题 配置邮件服务器 postfix学习网站:https://blog.csdn.net/mycms5/article/details/78773308  system1和systemc2分别执行 ...

  2. 《少年先疯队》第八次团队作业:Alpha冲刺1-5

    博文简要信息表: 项目 内容 软件工程 https://www.cnblogs.com/nwnu-daizh/ 本次实验链接地址 https://www.cnblogs.com/nwnu-daizh/ ...

  3. LG4783 【模板】矩阵求逆

    P4783 [模板]矩阵求逆 题目描述 求一个$N\times N$的矩阵的逆矩阵.答案对$10^9+7$取模. 输入输出格式 输入格式: 第一行有一个整数$N$,代表矩阵的大小: 从第$2$行到第$ ...

  4. nginx配置文件服务器 linux

    一,安装nginx服务器 点击打开链接 二,配置nginx服务器   ##测试配置文件   sudo /usr/sbin/nginx -t       ##修改配置文件   ##1. 在nginx文件 ...

  5. LightOJ - 1369 - Answering Queries(规律)

    链接: https://vjudge.net/problem/LightOJ-1369 题意: The problem you need to solve here is pretty simple. ...

  6. Java8新特性(拉姆达表达式lambda)

    一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runn ...

  7. Tensorflow细节-P202-数据集的高层操作

    本节是对上节的补充 import tempfile import tensorflow as tf # 输入数据使用本章第一节(1. TFRecord样例程序.ipynb)生成的训练和测试数据. tr ...

  8. C++命令空间使用和编译

    先创建目录结构 src bin obj lib include 1.创建命名空间 创建一个头文件include/head.h; #ifndef _GOOD_H #define _GOOD_H name ...

  9. C语言定义结构体指针数组并初始化;里面全是结构体的地址

    #include <stdio.h> #include <string.h> struct tells;//声明结构体 struct info { char *infos; } ...

  10. nyar4psg: Cannot find a class or type named "MultiMarker"

    Cannot find a class or type named "MultiMarker" 是一种常见错误,产生的原因是Library里面有1个以上的ar库. 以我的电脑为例, ...