【发布时间】:2018-04-06 11:22:19
【问题描述】:
链接:https://leetcode.com/problems/first-bad-version/discuss/71386/An-clear-way-to-use-binary-search
我正在做一个问题,给定一个像“FFTTTT”这样的字符串,我必须找到最右边的F 或最左边的T。
以下是代码:
To find the leftmost T
public int firstBadVersionLeft(int n) {
int i = 1;
int j = n;
while (i < j) {
int mid = i + (j - i) / 2;
if (isBadVersion(mid)) {
j = mid;
} else {
i = mid + 1;
}
}
return i;
}
我有以下疑惑:
- 我无法理解返回
i背后的直觉。我的意思是,我们为什么不返回j。我在脑海中试运行了代码,它成功了,但我们怎么知道我们必须返回i。 - 我们为什么不做
while (i<=j)而只做while(i<j)。我的意思是,我们如何确定这一点?
【问题讨论】:
-
关于你的第一个问题:改为返回 j,看看有什么区别。
-
关于你的第二个问题:如果
while(i<=j)全是Ts或Fs会发生什么?