谁能帮我弄清楚我在这里做错了什么吗?
Can some one help me figure out what I am doing wrong here?
我正在处理一个来自leet代码的问题,问题是:
你是一名产品经理,目前正在带领一个团队开发一种新产品。很遗憾,你们产品的最新版本没有通过质量检查。由于每个版本都是在前一个版本的基础上开发的,所以在一个坏版本之后的所有版本也是坏的。假设你有n个版本[1,2,…], n]你想找出第一个坏的,它会导致后面所有的坏的。您将获得一个API
bool isBadVersion(version)
,它将返回版本是否坏。实现一个函数来查找第一个错误版本。你应该尽量减少对API的调用次数。
对于上面的问题,我的解决方案是:
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);
class Solution
{
public:
int firstBadVersion(int n)
{
bool x = isBadVersion(n);
if (x == true)
{
return n;
}
else
{
return firstBadVersion(n + 1);
}
}
};
但是在leet代码中,它说我有错误的解决方案。谁能告诉我正确的方向?
我从leet代码中得到的解释是:
输入:2个版本
输出:2
期望:1
您的代码实际上会找到第一个错误的版本,在传入的版本(n
)上或之后。换句话说,它取决于你传递的内容。
我怀疑实际传递的是最高的版本(尽管规格说明对此不清楚,但这是有道理的),这意味着您总是给出最高的版本而不是最低的版本。您最好使用(伪代码):
def findfirstbad(n):
for i = 1 to n:
if isbadversion(i):
return i
return sentinel # 0 or -1 or some other NA response.
在任何情况下,最小化API调用将需要使用二进制搜索算法,您应该研究一下。你目前拥有的是一个递归的线性搜索,它不会最小化调用的数量。
线性搜索在每次迭代(或递归)中删除一个可能的项,而二元搜索每次将删除剩余空间的一半。伪代码应该是这样的:
def findfirstbad(n):
# No bad version possible if no versions.
if n < 1:
return sentinel
# Start pincer at ends.
lastgood = 0
firstbad = n
# Continue until lastgood and firstbad are together.
while lastgood + 1 < firstbad:
# Find midpoint, adjust correct pincer.
mid = (lastgood + firstbad) / 2
if isbadversion(mid):
firstbad = mid
else:
lastgood = mid
# Ensure one last check in case there were no bad versions.
if isbadversion(firstbad):
return firstbad
return sentinel
如果在纸和笔的帮助下在头脑中运行这段代码,您将看到它逐渐引入lastgood/firstbad
索引,直到找到第一个坏索引(或者发现是没有坏索引)。
然后一个简单的检查将决定你是否找到了它,如果你找到了,返回版本。
你从上一个版本开始计数
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用
- 我在查找和字符串上做错了什么?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 我在尝试将多个值push_back向量时出错。我做错了什么?
- 插入排序:我做错了什么?