天天看點

C++&Python描述 LeetCode 704. 二分查找

C++&Python描述 LeetCode 704. 二分查找

  大家好,我是亓官劼(qí guān jié ),在公衆号、GitHub、B站、華為開發者論壇等平台分享一些技術博文,全平台的id皆為:亓官劼(qí guān jié ),​

​除以上平台,其他的亓官劼id都不是本人,有不少網站在冒充,注意甄别​

​​。

放棄不難,但堅持一定很酷!時光荏苒,未來可期,一起加油~

  建了個小交流群,Q群:545611263,。近期對博文更新政策做了些調整,微信公衆号後期将用來更新一些總結性的文章(更新頻率将會很低),類似于刷題、一些bug解決等雜項記錄的blog就更新在、華為開發者論壇和GitHub上。

  同時文章在GitHub中進行了開源,内含本系列文章目前已刷的各個題解和解題思路,GitHub位址為:​​LeetCode​​,如果文章對你有幫助的話可以來GitHub點個star,如果有更好的解題思路的話,也可以來GitHub送出~一起改進

題目

給定一個 ​

​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      
  1. 你可以假設 ​

    ​nums​

    ​ 中的所有元素是不重複的。
  2. ​n​

    ​​ 将在 ​

    ​[1, 10000]​

    ​之間。
  3. ​nums​

    ​​ 的每個元素都将在 ​

    ​[-9999, 9999]​

    ​之間。

解題思路

C++實作

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int l = 0, r = nums.size();
        while(l <= r){
            int mid = (l + r) >> 1;
            if(nums[mid] == target) return mid;
            if(nums[mid] > target){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return -1;
    }
};      

Python實作

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        l, r = 0, nums.__len__()
        while l < r:
            mid = (l + r) >> 1
            if nums[mid] == target: return mid
            if nums[mid] > target: r = mid
            else: l = mid + 1
        return -1