【C++】二分查找算法

1.题目

2.算法思路

暴力解法:可以将数组遍历一遍,就可以找到。时间复杂度为O(n)。不算太差,可以接受。

但是有更优秀的解法:

就是二分查找算法。

算法的特点:我们所查找的"数组"具有二段性。这里的二段性不一定有序。而是我们可以找到某种规律,可以让我们把数组分为两部分,然后舍掉一部分,对另一部分进行求解。

本题中数组的有序就是二段性的一种体现。

在后面的题目中,我会举一个无序的但是可以用二分查找算法解决的题目。

3.代码

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) right=mid-1;
            else if(nums[mid]<target) left=mid+1;
            else return mid;   
        }
        return -1;
    }
};

时间复杂度:O(longn)。

4.算法模板

相关推荐
栈与堆5 分钟前
LeetCode-88-合并两个有序数组
java·开发语言·数据结构·python·算法·leetcode·rust
源代码•宸13 分钟前
Leetcode—712. 两个字符串的最小ASCII删除和【中等】
开发语言·后端·算法·leetcode·职场和发展·golang·dp
无限进步_17 分钟前
【C语言&数据结构】相同的树:深入理解二叉树的结构与值比较
c语言·开发语言·数据结构·c++·算法·github·visual studio
java修仙传28 分钟前
力扣hot100:每日温度
算法·leetcode·职场和发展
咚咚王者31 分钟前
人工智能之核心基础 机器学习 第十章 降维算法
人工智能·算法·机器学习
源代码•宸40 分钟前
Golang语法进阶(Context)
开发语言·后端·算法·golang·context·withvalue·withcancel
源代码•宸41 分钟前
Golang语法进阶(Sync、Select)
开发语言·经验分享·后端·算法·golang·select·pool
sali-tec41 分钟前
C# 基于OpenCv的视觉工作流-章8-形态学
人工智能·深度学习·opencv·算法·计算机视觉
栈与堆1 小时前
数据结构篇(1) - 5000字细嗦什么是数组!!!
java·开发语言·数据结构·python·算法·leetcode·柔性数组
LightYoungLee1 小时前
算法(五)树 Trees V2
学习·算法·深度优先