跳到主要内容

278.第一个错误的版本

链接:278.第一个错误的版本
难度:Easy
标签:二分查找、交互
简介:实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

题解 1 - c

  • 编辑时间:2021-11-28
  • 内存消耗:5.5MB
  • 编程语言:c
  • 解法介绍:二分。
int firstBadVersion(int n) {
long l = 1, r = 2147483647, m;
while (l < r) {
m = (r + l) / 2;
// 每次中间值是错误版本,就右侧值左移当中间值
if (isBadVersion(m)) r = m;
// 否则就左侧点是成功版本,找中间值的后一个
else l = m + 1;
}
return l;
}

题解 2 - typescript

  • 编辑时间:2021-06-14
  • 执行用时:84ms
  • 内存消耗:39.2MB
  • 编程语言:typescript
  • 解法介绍:二分搜索。
function solution(isBadVersion: (version: number) => boolean): (n: number) => number {
return (n: number): number => {
const find = (start = 1, end = n): number => {
if (start === end) return start;
const mid = ~~((start + end) / 2);
if (!isBadVersion(mid)) return find(mid + 1, end);
else if (mid === 1 || !isBadVersion(mid - 1)) return mid;
else return find(start, mid);
};
return find();
};
}

题解 3 - cpp

  • 编辑时间:2021-12-20
  • 内存消耗:5.9MB
  • 编程语言:cpp
  • 解法介绍:二分查找。
class Solution {
public:
int firstBadVersion(int n) {
long long l = 0, r = 0x7fffffff, m;
while (l < r) {
m = (r + l) / 2;
if (isBadVersion(m))
r = m;
else
l = m + 1;
}
return l;
}
};