每日一题——二分查找

题目


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

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

数据范围:0≤len(nums)≤2×105 , 数组中任意值满足 ∣val∣≤109

进阶:时间复杂度 O(logn) ,空间复杂度 O(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

思路


从数组的中间元素开始搜索,如果该元素为目标元素,则搜索过程结束,否则就进入下一个步骤,如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复判断是为目标值,如果在最后一步还是没有找到中间元素,则返回-1,表示找不到目标元素。

解答代码


cpp 复制代码
class Solution {
public:
    /**
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        // write code here
        if (nums.size() == 0) {
            return -1;
        } 

        int start = 0;
        int end = nums.size() - 1;
        while (start <= end) {
            int mid = (start + end) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target) {
                start = mid + 1;
            } else if (nums[mid] > target) {
                end = mid - 1;
            }
        }
    
        return -1;
    }
};
相关推荐
mmmmath_33 小时前
LeetCode.199.二叉树的右视图
数据结构·leetcode
专注仿真3 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸3 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫3 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil2088 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing8 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_38 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
loulanyue_9 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院9 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan9 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法