列表

详情


BM17. 二分查找-I

描述

请实现无重复数字的升序数组的二分查找

给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1

数据范围: , 数组中任意值满足
进阶:时间复杂度 ,空间复杂度

示例1

输入:

[-1,0,3,4,6,10,13,14],13

输出:

6

说明:

13 出现在nums中并且下标为 6

示例2

输入:

[],3

输出:

-1

说明:

nums为空,返回-1

示例3

输入:

[-1,0,3,4,6,10,13,14],2

输出:

-1

说明:

2 不存在nums中因此返回 -1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 26ms, 内存消耗: 7904KB, 提交时间: 2022-05-14

static const auto io_sync_off = []()
{
    // turn off sync
    std::ios::sync_with_stdio(false);
    // untie in/out streams
    std::cin.tie(nullptr);
    return nullptr;
}();
//上面一坨看看有什么用
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @param target int整型
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        int size=nums.size();
        if(size==0){
            return -1;
        }
        int start=0,end=size-1,mid;
        while(start<=end){
            mid=(start+end)/2;
            if(nums[mid]==target){
                return mid;
            }
            if(nums[mid]>target){
                //大了,往小的去
                end=mid-1;
            }else{
                start=mid+1;
            }
        }
        return -1;
    }
};

Rust 解法, 执行用时: 27ms, 内存消耗: 6408KB, 提交时间: 2022-03-31

struct Solution{

}

impl Solution {
    fn new() -> Self {
        Solution{}
    }

    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * 
        * @param nums int整型一维数组 
        * @param target int整型 
        * @return int整型
    */
    pub fn search(&self, nums: Vec<i32>, target: i32) -> i32 {
          if nums.len() == 0 {
            return -1;
        }

        let mut l=0;
        let mut r=nums.len() -1;
        
        while l<= r && l>=0 && r>=0{
            let mid=l+(r-l)/2;
            if mid > nums.len(){
                break;
            }
            if nums[mid] == target {
                return mid as i32;
            }else if nums[mid]<target{
                l=mid+1;
            }else{
                r=mid-1;
            }
        }
        -1
    }
}

C++ 解法, 执行用时: 27ms, 内存消耗: 7948KB, 提交时间: 2022-05-09

static const auto io_sync_off = []()
{
    // turn off sync
    std::ios::sync_with_stdio(false);
    // untie in/out streams
    std::cin.tie(nullptr);
    return nullptr;
}();
//上面一坨看看有什么用
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        int size=nums.size();
        if(size==0){
            return -1;
        }
        int start=0,end=size-1,mid;
        while(start<=end){
            mid=(start+end)/2;
            if(nums[mid]==target){
                return mid;
            }
            if(nums[mid]>target){
                //大了,往小的去
                end=mid-1;
            }else{
                start=mid+1;
            }
        }
        return -1;
    }
};

C++ 解法, 执行用时: 32ms, 内存消耗: 7884KB, 提交时间: 2022-06-12

static const auto io_sync_off = []()
{
    // turn off sync
    std::ios::sync_with_stdio(false);
    // untie in/out streams
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        int size = nums.size();
        if(size == 0) return -1;
        //if(size == 1) return nums[0] == target ? 0 : -1;
        //if(target > nums[size-1] || target < nums[0]) return -1;
        int L = 0, R = size - 1, Mid;
        while(L <= R)
        {
            Mid = (L + R) / 2;
            if(nums[Mid] == target) return Mid;
            else if(nums[Mid] > target) R = Mid - 1;
            else L = Mid + 1;
        }
        return -1;
        
    }
};

C++ 解法, 执行用时: 33ms, 内存消耗: 7852KB, 提交时间: 2022-05-08

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return nullptr;
}();

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

上一题