在做题中学习(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;
    }
};
相关推荐
把我格子衫拿来1 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
总裁余(余登武)1 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦1 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl5851 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
雾沉川2 小时前
Visual C++运行库合集 v105.0 安装教程
开发语言·c++·dll
_wyt0012 小时前
洛谷P17461 [GESP202609 八级] 生成树计数 题解
c++·数学·树·gesp·八级·仙人掌
CCblandy2 小时前
向量检索 ANN 参数实测:换一种数据分布,recall 掉了 51 个百分点
人工智能·python·算法·自然语言处理·性能优化
CS创新实验室2 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
深圳市快瞳科技有限公司2 小时前
面向端侧部署的多帧宠物身份识别:完整性评分机制与工程约束
人工智能·算法·计算机视觉·端侧ai·宠物识别·宠物ai·宠物身份识别