二分查找


 

首先,介绍一下我自己,本人是一个普通二本的专升本毕业生,这些年一直从事计算机工作,但是自己也没有很好的计算机的基础,因此开一些这方面的基础学习,可能说的并不是太对,就是记录下来方便自己去理解。

二分查找,主要是针对有序数组,没有重复元素的情况下,进行使用的。

自己使用C语言比较多,一般数组在C语言的内存分布,都是线性分布,也就是连续地址分布。

 

 

我从几道leetcode的题,来方便我自己了解这个算法,并且手工实现这个算法。

 

 

 

复制代码
 1 class Solution {
 2 public:
 3     int search(vector<int>& nums, int target) {
 4         int left=0;
 5         int right=nums.size()-1;
 6         while(left<=right)
 7         {
 8             int middle= left+(right-left)/2;
 9             if(nums[middle]>target)
10             {
11                 right=middle-1;
12             }else if(nums[middle]<target)
13             {
14                 left=middle+1;
15             }else{
16                 return middle;
17             }
18         }
19         return -1;
20     }
21 };
复制代码

一共有2种写法,主要就是注意这个区间的问题,这里我的判断是用的(left<=right).

 

 

 

 

复制代码
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<=right)
        {
            int middle=left+(right-left)/2;
            if(nums[middle]>target)
            {
                right=middle-1;
            }else if(nums[middle]<target)
            {
                left=middle+1;
            }else
            {
                return middle;
            }           
        }

         return right+1;
    }
};
复制代码

 

posted @   飘雨的河  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示