二分查找&好久不见
Posted 阿博的菜鸟笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找&好久不见相关的知识,希望对你有一定的参考价值。
二分查找&好久不见
好久不见
二分查找-只为快点找到你
还是那句话, 超级简单,假如有n个人,按大小个排列,你事先并不知道所有人的具体身高,你想从中间找个又高又帅的,但又不是太高的,比如 180。你可能想到,从最矮的开始一个个问,直到问到有180的为止,这样的解法,很八嘎,很笨蛋。如果最后一个是180, 你要把所有人都问一边才轮到他,那这时候我们的复杂度是O(N), 如果不明白这个符号,去看之前的推送, 并且press like button。
那不八嘎的解法是什么呢?问题已经假设了,他们是按照大小个排列的,我们可以从中间的开始问,问他身高是多少,如果大于180, 我们就从左面剩下的队列开始找,小于180,我们就从右边剩下的队列开始找,对于剩下的队列,我们还是从中间开始找,不断一直找下去,就可以最终找到那个180. 这时候复杂度多少呢,这时候复杂度是O(lgn),super super fast。
上代码
我们这次用一道leetcode的题来讲。
问题就是,给你一个排列好的数组,看他出现过几次。
首先我们用l 和 r代表list的最左端和最右端,然后我们使用一个while循环,不断的求出当前list的中心是哪里,然后和target进行比对,如果小于target, 我们更新l 为中点右边的数字,如果大于target,我们更新r为中点左边的数字,如果正好是target,我们跳出循环(代码没有写出,懒得改),这部分就是二分查找啦,因为这一题要我们return,target出现的次数,再因为是排序过的,所以我们不断探索周边的数字,最后输出数量。
以上是关于二分查找&好久不见的主要内容,如果未能解决你的问题,请参考以下文章