在做题中学习(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;
    }
};
相关推荐
凌波粒6 分钟前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
啵啵啵鱼7 分钟前
数组---完
算法·排序算法
beethobe8 分钟前
PythonQt 学习之旅(一):从零构建 C++ 与 Python 的桥梁
c++·python·学习
鹏易灵12 分钟前
C++——2.常量与 const、constexpr 初识详解
java·开发语言·c++
嘿黑嘿呦13 分钟前
chap 8排序
算法·蓝桥杯·排序算法·软件工程
richdata23 分钟前
需求预测终极指南:零售商品预测方法、算法与AI实践
人工智能·算法·零售
如果你想拥有什么先让自己配得上拥有23 分钟前
创业全周期证券学习法评价与系统观分析
学习
踏着七彩祥云的小丑26 分钟前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习
神仙别闹27 分钟前
基于C++ 实现 BP 神经网络
开发语言·c++·神经网络
隔窗听雨眠1 小时前
C语言函数递归从入门到精通(下):性能优化与工程实践
c语言·算法·性能优化