面试算法:二分法

二分法总结(超级详细)附带图解 文章目录1. 二分法2. 时间复杂度:3. 二分法的套路3.1 1. 二分法 二分查找是一个时间效率极高的算法,尤其是面对大量的数据时,其查找效率是极高,时间复杂度是log(n)。 主要思想就是不断的对半折叠,每次查找都能除去一半的数据量,直到最后将所有不符合条件的结果都去除,只剩下一个符合条件的结果。 2. 时间复杂度:   二分法的时间复杂度是log(n),但log(n)为什么效率这么高呢?接下来我举个例子来描述一下:   我们都听说过指数爆炸,何为指数爆炸,就是在指数不断增加的情况下,其数值的上 阅读详情


一、什么是二分法

二分法, 是时间复杂度为O(logn)的一种方法。其核心思想是:在一个已经排序好的数组中,每次取中间值。在每次比较中间值与查找目标的过程中,可以排除掉一半的数据。

二、二分法模版

最基础的二分法模版,对二分法题型非常实用。

模版:

//设置执行条件为start + 1 < end, 之后在单独处理start跟end 
//更加通用,完全杜绝infinity loop
while(start + 1 < end){ 
	int mid = start + (start - end)/2; // 防止stack overflow
	if(array[mid] > target){
		end = mid;
	}
	else if(array[mid] < target){
		start = mid;
	}
	else {
		end = mid;
	}
}
if(nums[start] == target){
	return start;
}
if(nums[end] == target){
	return end;
}

三、四种二分法题型

在面试题里,根据所给数据集对二分法有四种归类。

1.单调数据集二分

在这类题型里,所给的数据集是单调递增(递减)的,需要使用一次或多次标准二分法模版来找到元素的位置。

2.有序不单调数据集二分

数据集是有序的但并不单调。比如: [4, 5, 6, 0 ,1, 2] [1, 3, 4, 7, 6, 2]
一般思路为:

  1. 使用二分法找到一个元素的位置,把数据集分成两个单调数据集
  2. 二分法处理单调数据集

第一步的二分法中,可以利用两端点值 + 单调性来找到那个把数据集分割成两个单调数据集的点。

3.无序数据集二分

数据集无序,二分的时候要根据条件去掉一半数据,对另一半数据继续二分。难点在于找判断条件,其它过程跟普通二分法一样。

4.答案集二分

没有给出数据集,需要自己创造一个答案集(包含答案的集合)。然后对答案集使用二分法,找到答案。


六、题目

https://blog.csdn.net/Kejonho/article/details/109134535

字节算法面试精讲:贪心+二分法求解“小于n的最大数” 本文详细解析了字节算法面试中的经典题目:使用贪心算法二分法求解“小于n的最大数”。通过贪心策略实现高位优先匹配,结合二分查找优化搜索效率,提供了完整的Python实现和边界条件处理,帮助开发者高效应对类似算法挑战。 阅读详情

相关推荐

超详解“二分法查找”,一看就会!

二分法往简单明了就三个步骤:1. 对半折 2. 查找中间值(mid) 3.缩小区间(看与mid的关系再决定,往左+1或者往 右-1)

m0_68993867的博客 1万+

二分法----一看就会,一写就废

文章目录一、二分法是什么?二、二分法在什么情况下使用三、实际应用 一、二分法是什么? 二分法通常又叫二分查找,一般用于查找一个有序数组中的某个值的位置或者给定的特定值的插入位置; 相比把整个数组遍历一次的O(n)复杂度,二分查找可以把复杂度降低到O(logn); 二分查找的基础概念在这里就不再赘述,本文主要记录二分法的基本情况使用和采用二分思路来求解的一些问题。 二、二分法在什么情况下使用 二分法一定是建立在元素有序的前提下的;所以看到题目中出现有序数组等词时,并且要求我们查找某个值或者给一个值求插入位置

GOV_D的博客 2万+

数据结构与算法---二分法 超详细解,保证你能看懂!!!!!

待更新!!

深度不学习!!的博客 4653

算法】—二分法详解

在计算机科学中,二分查找算法也称折半搜索算法,对数搜索算法,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半,时间复杂度是log(n)二分法的步骤:我们要在一组升序的数组找一个数的下标,那我们肯定是先拿中间的与他进行比较,比较大小的判断,其实

DAY I 的成长之路 1万+

详解二分算法(一学就懂,一写就会)

小明:"小张,我问你一个问题:在1,3,5,6,7,9这些数中5在那个位置?小张:"这还不简单,5在第三个位置!我是按顺序来找的:1,3,5。小明:"那我告诉你1~100这些数,让你找其中100这个数,你也从1~100来一个一个数吗?小张:"那我会从100~1来数。小明:"那如果你是一个机器人,我再问你这个问题,问:55在哪个位置?可是你只能从1~100或100~1来数数,可是这样数太慢啦!小张:"那可以怎们来数呢?小明:"这就要用到二分法的方法来解决啦!二分法,是指将一个有序。

MLJYHP的博客 1万+

二分法

二分法 二分法是一种很常见的算法,它的具体应用可以分为两大类:二分查找算法、二分排序算法 一、二分查找算法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。用函数可以表示为`` int left = 0,right = len-1,mid; while(left &l...

qq_41461410的博客 1199

二分法查找平方和_面试手撕算法系列:二分法

最近春招开始了,面试面着面着一言不合就开始手撕代码手撕就手撕,接下来我打算写几个专题讲讲面试中手撕的常见题目这些都是LeetCode上有的题目手撕无非就是树、链表、二分、字符串这些常用的数据结构所以接下来请关注我们的专题吧二分法二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则...

weixin_39590601的博客 316

数据结构二分法算法的步骤_程序员须知:面试中最容易被问到的18个算法

算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的,本文给出了一些基本答案,供算法方向工程师或对此感兴趣的程序员参考。1)请简单解释算法是什么?算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。2)解释什么是快速排序算法?快速排序算法能够快速排序列表或查询。它基于分割交换排...

weixin_35797127的博客 159

二分法更快的算法_九章算法 | Facebook面试题:对x开根 II

实现 double sqrt(double x) 并且 x >= 0。计算并返回x开根后的值。 在线评测地址:LintCode 领扣例1:输入: n = 2 输出: 1.41421356例2:输入: n = 3 输出: 1.73205081【题解】算法:二分此题有两种做法,一种是牛顿迭代法,一种是二分,这里介绍二分法二分浮点数与寻常二分不同的是while中变成了whlie(left+eps...

weixin_39901439的博客 349

看图聊算法:超越二分法,探索大厂经典面试

在上一篇文章的猜数游戏中,我们提到了如下思考题:看图聊算法:一个游戏让你理解二分法的本质题目: 你有一个天平和12个小球,其中有一个是假球,但我们不知道它是轻还是重。你至少需要称重多少次来确定哪个是假球?这实际上是大厂面试中的经典问题。我曾经困惑,为什么一个益智题会出现在技术面试里,而且它似乎与技术无关。但经过深入探究,我了解到这种题目的真正考察点。它旨在测试你是否能够灵活运用技术的核心原理,并...

dotNET跨平台 367

java实现二分查找面试_面试必备算法:Java 实现非递归二分法算法

(1)、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序(2)、原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值 则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。可能描述得不是很清 楚,若是不理解可以去网上找...

weixin_33700809的博客 235

九章算法 | 微软面试题:可能的二分法

描述 给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组。 每个人都可能不喜欢其他人,那么他们不应该属于同一组。 形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。 当可以用这种方法将每个人分进两组时,返回 true;否则返回 false。 1 <= N <= 2000 0 <= disl...

九章算法的博客 156

数据结构二分法算法的步骤_程序员须知:面试中最容易被问到的18个算法题(附答案!)...

算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的,本文给出了一些基本答案,供算法方向工程师或对此感兴趣的程序员参考。1)请简单解释算法是什么?算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。2)解释什么是快速排序算法?快速排序算法能够快速排序列表或查询。它基于...

weixin_42367148的博客 211

数据结构与算法面试分享(十五):二分法

从上面的规律可以知道,如果 nums[m] == nums[m + 1],那么 index 所在的数组位置为 [m + 2, h],此时令 l = m + 2;在循环条件为 l

之乎者也·的博客 449

二分法(整数二分/实数二分,二分答案/二分查找)

也就是在单调递增序列中。

wyqxii的博客 4399

详解二分法

一、简单二分 前言 一直以来我对二分都有一个误解,认为问题必须满足某种有序才可以用二分法去解决问题,这种想法有点狭义化二分法了,其实二分法是一种算法思想,通过不断对折区间的方式,帮助我们得到满足条件的解,在我们写算法题的时候二分法是必须要满足有序性的,他可能是局部有序,也有可能是整体有序,但是一定具有单调性,下面将通过几个例题来给大家讲解二分的思想, 先看一道很有意思的趣味题: 有N件产品,他们的重量都是G,但是当中有一件是不合格的产品,他的重量是g,那么现在给你一个称,求你称最少的次数找出这个产品,相信很

qq_36310758的博客 2万+

面试高频:二分法,多题多图,一次讲个明白

基础算法一:二分法,你思考过这些问题吗? 如何优雅的处理边界条件? 一定要数据有序时才能使用二分吗? 如何优雅的证明二分法的时间复杂度是O(logn)? 如果这几个问题你已经完全掌握了,可以点击右上角关闭。如果想听听我的心得,请读完下面内容。 1. 什么是二分法? ​ 二分法(Bisection method),即一分为二的的方法。对于在区间[a,b]上连续不断且满足f(a)*f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在区间二等分,使区间两个端点逐步逼近零点,进而得到零点的近似值

u014339447的博客 1612

最简单易懂二分法详解

二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景、模板代码、典型题目。 二分法的理论背景   在《计算方法》教材中,关于非线性方程的求根问题,有一种是二分法。   方程求根是常见的数学问题,满足方程:           f(x) = 0              (1-1)   的数x’称为方程(1-1)的根。   所谓非线性方程,是指f(x)中含有三角函数、指数函数或其他超越函数。这种方程,很难或者无法求得精确解。不过,在实际应用中,只要得到满足一定精度要求的近似解就可以了,此时,需

qq_26139541的博客 1万+
上一篇: 面试题目归纳:二分法
下一篇: 面试题目归纳:宽度优先搜索
Jon Ji
博客等级 码龄6年 2粉丝 10原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值