在做题中学习(48):朴素的二分查找

. - 力扣(LeetCode)

解法一: 暴力求解

for循环中,从nums0枚举到numsn-1,依次判断,返回 == target的值。

时间复杂度 : O(N) :因为要遍历一遍数组

解法二:二分查找

因为此数组为有序的数组,所以可以每次取数组中心元素来比较,<target就往右移动,>target就往左移动,之后由新的left right更新mid,若mid所在位置的值 == target 则返回mid 下标

1.mid < target left++

2.mid > target right--

3.mid == target return mid;

时间复杂度:O(logN)

细节问题:

1. 求中间元素

(left + right) /2 这种求法又可能会溢出(如果left + right足够大的话),因此建议用下面的求法:

left + (right - left) /2 又可能会见到 left + (right - left + 1) /2

两种的区别是:当元素数量为偶数时,会指向不同的值。

cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        int left = 0,right = nums.size()-1;
        while(left<=right)
        {
            int mid = left + (right - left) /2;
            if(nums[mid] < target)
                left = mid + 1;
            else if(nums[mid] > target)
                right = mid - 1;
            else 
                return mid;
        }
        return -1;
    }
};
相关推荐
垆边人似月.7 分钟前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫8 分钟前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
pride.li18 分钟前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法
海绵宝宝转agent42 分钟前
2026-10-16 4算法+1面经
算法
小poop1 小时前
基础排序算法详解——插入、选择与交换排序
算法·排序算法
lisw051 小时前
“科学前沿极限突破计划”述评!
大数据·人工智能·学习
青蓝智慧马老师1 小时前
想学数据分析但零基础,正确顺序不是先学 Python
大数据·人工智能·算法
外收内放1 小时前
数据分析(数据清洗)
python·学习·数据分析
一条泥憨鱼1 小时前
【计算机网络】| 详解链路层:MAC 地址与VLAN
网络·学习·计算机网络
jeo陽1 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法