在做题中学习(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;
    }
};
相关推荐
charlie1145141912 分钟前
嵌入式C++教程实战之Linux下的单片机编程:从零搭建 STM32 开发工具链(4)从零构建 STM32 构建系统
linux·开发语言·c++·stm32·单片机·学习·嵌入式
AI成长日志4 分钟前
【笔面试算法学习专栏】双指针专题:简单难度三题精讲(167.两数之和II、283.移动零、344.反转字符串)
学习·算法·面试
Book思议-8 分钟前
【数据结构】数组与特殊矩阵
数据结构·算法·矩阵
不吃蘑菇!21 分钟前
LeetCode Hot 100-1(两数之和)
java·数据结构·算法·leetcode·哈希表
T1an-128 分钟前
最右IOS开发A卷笔试题3.31
c++·ios
paeamecium29 分钟前
【PAT甲级真题】- Linked List Sorting (25)
数据结构·c++·算法·pat考试·pat
AnalogElectronic34 分钟前
uniapp学习6,滚动字幕播报
javascript·学习·uni-app
rqtz44 分钟前
【C++】揭秘工程实践:Boost 源码编译与 CMake 环境搭建的具体流程
开发语言·c++·网络编程·boost
Yupureki1 小时前
《Linux系统编程》19.线程同步与互斥
java·linux·服务器·c语言·开发语言·数据结构·c++
phoenixlxl1 小时前
allegro导出焊盘
学习