有一系列產品,從某個開始其後都不合格,給定一個判斷是否合格的函數,找出N個產品中第一個不合格的產品。函數
正確答案:spa
// Forward declaration of isBadVersion API. bool isBadVersion(int version); class Solution { public: int firstBadVersion(int n) { int low = 1; int high = n; int ver = 0; while (low < high) { ver = low + (high - low) / 2; //這個題注意點!!若是直接high+low可能溢出,就會超時…… if (isBadVersion(ver)) { high = ver; } else { low = ver + 1; } } return low; } };
=============code
有一道很是相似的題目blog
猜數遊戲:1-n以內有一個數是預選的數字,每次回告訴大仍是小或者正確。返回猜中的數字。遊戲
// Forward declaration of guess API. // @param num, your guess // @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 int guess(int num); class Solution { public: int guessNumber(int n) { int start = 1; int end = n; int res = 1; while (start<end){ int mid = start + (end-start)/2; if (guess(mid)==0){ return mid; } if (guess(mid)==1) start = mid+1; else end = mid-1; } if (guess(start)) return start; return end; } };