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

. - 力扣(LeetCode)

解法一: 暴力求解

for循环中,从nums[0]枚举到nums[n-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 分钟前
MFC工控项目实例三十二模拟量校正值添加修改删除
c++·mfc
EterNity_TiMe_9 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
长弓聊编程11 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
sanguine__13 分钟前
java学习-集合
学习
lxlyhwl13 分钟前
【STK学习】part2-星座-目标可见性与覆盖性分析
学习
nbsaas-boot14 分钟前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
cherub.18 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
机器学习之心20 分钟前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds31 分钟前
FIFO和LRU算法实现操作系统中主存管理
算法
暮色_年华32 分钟前
Modern Effective C++item 9:优先考虑别名声明而非typedef
c++