- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在研究 problem 的不同算法在 Leetcode 上以 approach 1 开头.如果数组值是墙的高度,则该问题需要计算总水域面积(列宽 = 1)。
第一种方法找到每列左侧和右侧最大墙高的最小高度,如果列高度小于最小值,则将水添加到给定列的顶部。取最小值是因为这是收集到的水可以达到的最高值。要计算每边的最大值,需要对左侧和右侧进行 n-1
遍历。
我用 Python 编写代码,但这里是根据 Leetcode 上给出的解决方案用 C++ 编写的代码.
int trap(vector<int>& height)
{
int ans = 0;
int size = height.size();
for (int i = 1; i < size - 1; i++) {
int max_left = 0, max_right = 0;
for (int j = i; j >= 0; j--) { //Search the left part for max bar size
max_left = max(max_left, height[j]);
}
for (int j = i; j < size; j++) { //Search the right part for max bar size
max_right = max(max_right, height[j]);
}
ans += min(max_left, max_right) - height[i];
}
return ans;
}
我注意到在外循环迭代中左右列的最大值包括当前列。这样你可以获得的最低值为0。请确认这是正确的。我在 0
和要在我的代码中收集的 potentialWater
之间使用了 min()
。
我查看了代码并以我自己的方式重写了它,但我得到的是 0
,因为我收集的雨水总量应该是 6
。我的代码哪里出错了?
class Solution:
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height) <= 2:
return 0
water = 0
for col in range(1, len(height)-1):
maxLeft = 0
maxRight = 0
for index in range(col):
maxLeft = max(maxLeft, height[index])
for index in range(col+1,len(height)):
maxRight = max(maxRight, height[index])
minHeight = min(maxLeft, maxRight)
# print(col, minHeight)
# minHeight = min(max(height[:col]), max(height[col+1:]))
potentialWater = minHeight - col
# print(potentialWater)
# water += potentialWater
water += max(0, potentialWater) # in case this is the highest column
return water
solution = Solution()
height = [0,1,0,2,1,0,1,3,2,1,2,1]
print(solution.trap(height))
最佳答案
简单的调试策略可以迅速将问题缩小到这一行:
potentialWater = minHeight - col
为什么要从最小高度中减去 number 列???这些根本不是同一类数量。相反,您想减去当前列的高度:
potentialWater = minHeight - height[col]
有了这个改变,我们得到了想要的输出:
$ python3 trap.py
6
正如已经指出的评论,您应该为此使用 Pythonic 编程习惯用法,例如替换
for index in range(col):
maxLeft = max(maxLeft, height[index])
for index in range(col+1,len(height)):
maxRight = max(maxRight, height[index])
与
maxLeft = max(height[:col])
maxRight = max(height[col+1:])
关于python - 收集雨水 : Bug in brute force approach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806917/
我需要为MySQLd打开网络,但是每次这样做,服务器都会被强行淘汰。一些卑鄙的密码猜测脚本开始在服务器上运行,在端口3306上打开连接并永久尝试随 secret 码。 我该如何阻止这种情况的发生? 对
? 1 2
我正在使用 ZAP 2.7.0,我想枚举给定站点的子目录中可能的文件/目录。市场上不再提供 DirBuster 工具。但是,ZAP 实现了与字典文件结合使用的“强制浏览”功能。 我能够对给定网站 ab
我正在使用 ZAP 2.7.0,我想枚举给定站点的子目录中可能的文件/目录。市场上不再提供 DirBuster 工具。但是,ZAP 实现了与字典文件结合使用的“强制浏览”功能。 我能够对给定网站 ab
我正在使用 scipy.optimize.brute() ,但我注意到它只使用了我的一个核心。网格搜索的一大优势是解决方案算法的所有迭代都相互独立。 既然如此 - 为什么 brute() 没有实现在多
我正在接受这样的用户输入: algo_type "pattern" filename 例如。 bf "inging" input_file.txt 到目前为止,我将用户输入分为三个不同的变量,一个用于
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在使用 sklearn 对 knn 进行基准测试。这是系统信息。 系统信息 Intel(R) Xeon(R) L5640(6 核 12 个同级); Ubuntu 18.04、Python 3.7.
我正在做一个解决 TSP 的小项目,但遇到了问题。这个想法是通过简单地找到最佳组合来优化非最佳路径的局部部分。这是通过一个简单的递归置换生成函数实现的。 我现在要做的是检查当前解决方案是否有改进的潜力
我正在使用 scipy 的强力优化器来计算给定不同输入参数的函数的分数。为了分析结果,我想将结果参数与分数集转储到 csv 中。 我目前拥有的是来自强力优化器的返回值,其文档的形式如下: 返回: x0
当我尝试使用 scipy.minimize.brute() 最小化函数时使用以下代码: import scipy scipy.optimize.brute(lambda x: x**2, ranges
我试图在给定的时间间隔内最小化一个函数;在我的例子中,间隔是 [-pi/2, pi/2]。 这是我在脚本中写的: ranges = slice(-pi/2, pi/2, pi/200) res = o
最近我一直在阅读有关 CUDA、特征检测、基于 Flann 的匹配器、蛮力匹配器等的信息。我最近开发了一个使用 GPU 蛮力匹配器的演示,计算速度非常快。我还读到基于 Flann 的匹配器要快得多,但
我一直在研究 problem 的不同算法在 Leetcode 上以 approach 1 开头.如果数组值是墙的高度,则该问题需要计算总水域面积(列宽 = 1)。 第一种方法找到每列左侧和右侧最大墙高
我有以下代码来解决一个问题。 问题是: 最大化数组奇数和偶数位置元素之和的绝对差。 为此,您可以删除您想要多少元素。 我是通过使用回溯法通过蛮力完成的。我的逻辑是,对于每个索引,我有 2 个选项:a)
在 science museum in Norway 中我遇到了以下数学游戏: 目标是放置从 0 到 9 的 10 位数字,以使两个产品之间的差异最接近于零。 (246是目前最低分)。 回到家我写了下
我有一个 n 大小的 Rect 集合,其中大部分相互交叉。我想删除交叉点并将相交的 Rects 减少为更小的非相交的 rects。 我可以很容易地暴力破解一个解决方案,但我正在寻找一种高效的算法。 这
我正在从事一个 OpenCV 项目,我试图结合使用 ORB 特征检测器、BRISK 特征描述符和 Brute Force Matcher,通过我的网络摄像头提供的视频序列来检测、匹配和跟踪特征。 目前
给定一个整数数组,返回两个数字的索引,使它们相加达到特定目标。 您可以假设每个输入都有一个解决方案,并且您不能两次使用相同的元素。 示例: 给定 nums = [2, 7, 11, 15],目标 =
我设法使用 flexbox 和一些非常基本的 JavaScript 为自己构建了三个下拉菜单。 因为我不太了解,所以我使用了一个简单的函数三次,而不是使用参数、变量和其他东西。我将其称为丑陋的“蛮力”
我是一名优秀的程序员,十分优秀!