給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4
示例 2:
輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1
class Solution {
public:int search(vector<int>& nums, int target) {int height=nums.size()-1, low=0;int middle = (height + low) / 2;while (low <= height){if (target > nums[middle]){low = middle + 1;}else if (target < nums[middle]){height = middle - 1;}else{return middle;}middle = (height + low) / 2;}return -1;}
};
時間復雜度是O(logn)
你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由于每個版本都是基于之前的版本開發的,所以錯誤的版本之后的所有版本都是錯的。
假設你有 n 個版本 [1, 2, …, n],你想找出導致之后所有版本出錯的第一個錯誤的版本。
你可以通過調用 bool isBadVersion(version) 接口來判斷版本號 version 是否在單元測試中出錯。實現一個函數來查找第一個錯誤的版本。你應該盡量減少對調用 API 的次數。
示例 1:
輸入:n = 5, bad = 4
輸出:4
解釋:
調用 isBadVersion(3) -> false
調用 isBadVersion(5) -> true
調用 isBadVersion(4) -> true
所以,4 是第一個錯誤的版本。
示例 2:
輸入:n = 1, bad = 1
輸出:1
class Solution {
public:int firstBadVersion(int n) {long long low=0,height=n-1;long long middle=(height+low)/2;while(low<=height){if(isBadVersion(middle)){height=middle-1;}else{low=middle+1;}middle=(low+height)/2;}return middle+1;}
};