首页 > 其他分享 >二分的边界问题

二分的边界问题

时间:2022-12-19 12:44:56浏览次数:42  
标签:二分 right 边界问题 mid leq num 左闭 left

如何正确判断二分边界?

常见问题

  1. while 内条件是 \(\leq\) 还是 \(<\)
  2. left 和 right 的修改时用不用加 \(1\) 减 \(1\)

例题分析

例:
给定一个正整数 \(n( 1 \leq n \leq 1,000)\)。

第二行输入 \(n\) 个整数 \(num_i(0 \leq num_i \leq 10,000)\),保证严格单调递增,第三行输入一个整数 \(k( 0 \leq k \leq 10,000)\)。

若数列中有与 \(k\) 相等的数,输出其下标,否则输出 No

一般来说,我们将二分分为左闭右闭,左闭右开两种类型。

左闭右闭

首先我们根据上面容易出现的两个问题进行分析。

  1. 因为当出现 left == right 是有意义的,所以 while 内使用 left <= right
  2. 如果 num[mid] > k 成立,则下标超过 mid 的数(包括 mid)都不正确,因此 right = mid - 1。
    若是不成立,也不能判断 num[mid] 是否等于 k,所以不能使 left = mid + 1,而是 left = mid。
    不过在此题中可以直接判断是否相等,相等直接输出值即可。

左闭右开

还是根据上面两个容易出错的地方分析。

  1. 在左闭右开的区间里,left == right 没有意义,所以 while 内使用 left < right
  2. 如果 num[mid] > k 成立,又由于区间是左闭右开的,所以可以直接使 right = mid。不成立时和上面左闭右闭的相同。

标签:二分,right,边界问题,mid,leq,num,左闭,left
From: https://www.cnblogs.com/JXYBJ/p/erfenbianjie.html

相关文章

  • 二分类模型评价指标-总结
    knitr::opts_chunk$set(echo=TRUE)  介绍评价二分类模型的一些指标。1.混淆矩阵预测为正类预测为负类实际为正类TPFN实际为负类FPTN符号标记:TP—将正类预测为正类数......
  • 二分图与染色算法
    二分图的概念二分图就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。    染色法概......
  • (AtCoder Beginner Contest 282) D - Make Bipartite 2(二分图)
    题目大意:给定一个n个点m条边的图,请你在其中加一条边使得整个图G是二分图,问有多少种可能。(已有的边不能加)解题思路:首先我们要知道,二分图内是没有长度为奇数的回路的所......
  • C#二分查找算法实例分析
    原文链接:https://www.jb51.net/article/65006.htminternalclassProgram{staticvoidMain(string[]args){Programprogram=newProgram();......
  • 数据结构算法 之 二分查找法(LC)
    原文链接:https://blog.csdn.net/Luckyzhoufangbing/article/details/110389523(一)定义二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思......
  • 二分查找python与java实现
    定义给定以下情景,假设有一个有序的数组(从大到小排列),我们需要从中找出我们所需的目标元素并返回其索引。一般的思想是可以使用for循环进行遍历,直到找到目标元素......
  • 二分搜索算法
    二分搜索算法适用于有序数组。如果按照暴力搜索算法,那么需要从头到尾遍历数组元素,时间复杂度为O(n),而如果使用二分搜索,那么其时间复杂度为O(logn),根据时间复杂度曲线图可......
  • 关于整数二分的详解
    //查找左边界SearchLeft简写SLintSL(intl,intr){while(l<r){intmid=l+r>>1;if(check(mid))r=mid;elsel=......
  • HDU 4614 ——线段树+二分
    //题意:茜茜学姐的情人节到了!众所周知,茜茜学姐喜欢帅气的学弟,所以她当然有很多学弟送的花瓶,据不完全统计,茜茜学姐有N个花瓶(标号为0~N-1)。当然茜茜学姐也是个魅力四射......
  • 二分查找
    二分查找零、二分查找框架intbinarySearch(int[]nums,inttarget){intleft=0,right=...;while(...){intmid=left+(right-left)/......