在做题中学习(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;
    }
};
相关推荐
J_yyy12 小时前
基于Reactor的文件管理服务开发笔记
c++·笔记·reactor·多线程编程·muduo
foundbug99913 小时前
Polar Code 编解码 MATLAB 实现
开发语言·算法·matlab
李小小钦13 小时前
D. Storming Arasaka(Codeforces 2238)
c语言·开发语言·数据结构·c++·算法
心中有国也有家13 小时前
AtomGit Flutter 鸿蒙客户端:一键记录情绪的极致体验
学习·flutter·华为·harmonyos
卷无止境13 小时前
SFML 深度解读:一个教科书级 C++ 多媒体库的内功心法
c++·后端
技术不好的崎鸣同学13 小时前
[ACTF2020 新生赛]Include 思路及解法
算法·安全·web安全
lauo13 小时前
从52起融资看教育科技新范式:PopLang引擎与Token节点经济如何重塑AI学习终端
人工智能·科技·学习
先吃饱再说13 小时前
一篇吃透树的遍历:递归与迭代的完整拆解
数据结构·算法
咸甜适中13 小时前
rust语言学习笔记——Tokio库(异步编程)
笔记·学习·rust·tokio
YUS云生13 小时前
Python学习笔记·第29天:Git进阶——分支操作与合并冲突
笔记·python·学习