0
点赞
收藏
分享

微信扫一扫

【LeetCode 01】二分查找总结


二分查找总结

文章目录

  • ​​二分查找总结​​
  • ​​一、适用条件​​
  • ​​二、方法类型​​
  • ​​三、二分法的两种写法​​
  • ​​3.1第一种写法“左闭右闭”​​
  • ​​3.2第二种写法“左闭右开”​​

一、适用条件

二分查找适用条件为:

  • 数组问题
  • 有序无重复元素数组

如【LeetCode 704】:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

二、方法类型

二分查找法的思路主要是根据区间定义的“不变量”进行划分的。二分法中区间的定义主要有两种:

  1. 左闭右闭[left,right]
    意思是target值在区间[left,right]中,那么left与right的关系是 “<=”

while(left<=right){
xxxx;
}

  1. 左闭右开[left,right)
    意思是target值在区间[left,right)中,那么left与right的关系是“<”

while(left<right){
xxx;
}

三、二分法的两种写法

根据例题:

【LeetCode 01】二分查找总结_leetcode

3.1第一种写法“左闭右闭”

int search(int* nums, int numsSize, int target){
//step1:写出临界条件变量:left,right
int left=0;
int right=numSize-1;
//------------------------

//step2:写出区间--左闭右闭;写出middle动态值
while(left<=right){
int middle=left+((right-left)/2);//数组取中间值赋给middle变量
//step3:根据条件移动middle值
if(nums[middle]>target){
//step4:往条件里补充条件(left,right指针如何动态移动?)
right=middle-1;
}else if(nums[middle<target]){
left=middle+1
}else{
return middle;//找到目标值target=middle
}
}
return -1;

}

3.2第二种写法“左闭右开”

int search(int* nums, int numsSize, int target){
//step1:写出临界条件变量:left,right
int left=0;
int right=numSize-1;
//------------------------

//step2:写出区间--左闭右闭;写出middle动态值
while(left<right){
int middle=left+((right-left)/2);//数组取中间值赋给middle变量
//step3:根据条件移动middle值
if(nums[middle]>target){
//step4:往条件里补充条件(left,right指针如何动态移动?)
right=middle;
}else if(nums[middle<target]){
left=middle+1
}else{
return middle;//找到目标值target=middle
}
}
return -1;

}

        return middle;//找到目标值target=middle
}
}
return -1;
}



举报

相关推荐

0 条评论