首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python递归函数,二分查找算法

我说我不告诉你,alex比 egon 大两岁。 你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。...l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] 你说,so easy!...是不是循环这个列表,一个一个的的呀?假如我们这个列表特别长,里面好好几十万个数,那我们一个数如果运气不好的话是不是要对比十几万次?这样效率太低了,我们得想一个新办法。...如果这样,假如我要的数比列表中间的数还大,是不是我直接在列表的后半边就行了? ? 这就是二分查找算法! 那么落实到代码上我们应该怎么实现呢?...=None): end = len(l)-1 if end is None else end mid_index = (end - start) // 2 + start if

76730
您找到你想要的搜索结果了吗?
是的
没有找到

python3--递归函数,二分查找算法的实现

# 注释 第一步执行age(4)函数,并传入一个参数4 # 第二步传参n=4,走else,此时age(4-1) + 2 # 第三步执行age(4-1)函数,n = 4-1,走else,此时age(4...l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] 第一种方法 l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88...,就需要把列表全部遍历一遍 第三种:二分查找(每次从中间取值,比较大小,如果要的数字比中间值大(如果比中间值小,就取前面那一半),就直接中间值后面的那一半,继续对半切片查找,在比较,直到找到为止)... aim, start=0, end=None):     end = len(li)-1 if end is None else end     mid_index = (end - start) /...,start=0,end=mid_index-1)         elif li[mid_index] == aim:             return mid_index         else

80820

排序算法

0) { if (a[end] > tmp) { a[end + gap] = a[end]; end -= gap; } else...要小——左边第一个做key R先走 //1.R停下来 L遇到R 二者相遇 相遇位置比key小 //2.L停下来 R遇到L 二者相遇 相遇位置比key小 //发生第二种情况一定是R没有找到小的和L相遇,此时...L的位置已经被换成比key小的数据 //同样的道理:如果右边第一个做key——L先走 //单趟排序的价值 //1.key已经找到了它的最终位置,这个数已经排好了 //2.分割出去了两个子区间,如果子区间有序...),则以第一个关键字65为基准而得到的一趟快 速排序结果是() A 34,56,25,65,86,99,72,66 B 25,34,56,65,99,86,72,66 C 34,56,25,65,66,...99,86,72 D 34,56,25,65,99,86,72,66 答案: 1.A 2.C 3.D 4.B 5.D 6.A 7.A

32750

一网打尽!二分查找解题模版与题型全面解析

+ 1; } else { end = mid - 1; } } 根据条件返回 end 或者 start 这里解释下,针对这个问题,要的元素可能会有很多个,我们需要最后出现的那个...题目分析 其实题目就是要最先出现的元素,在这种情况下,如果我们找到了元素,依旧不知道它是不是最先(小)的,但是我们知道答案肯定不在后面,肯定在这或者是之前,因此这种情况需要将尾指针往前移。...,或者是在前区间比要的元素大,这时我们需要移动尾指针 t m m m [...][...] -> 要的元素和二分中点都在前区间,但是要的元素比二分中点要大,这时移动首指针 m t [......][...] -> 要的元素在后区间,二分中点在前区间,或者是在后区间比要的元素小,这时我们需要移动首指针 m m m t [...][...] -> 要的元素和二分中点都在后区间,但是要的元素比二分中点要小...很难理解的原因是,我们可能会认为二分最后得到的答案有可能不在乘法矩阵中,这个疑点其实是可以利用二分的性质来解释的,二分就是不断趋近于最后的答案的过程,而且这里我们是二分整数,你可以把这道题想象成元素在数组中最先出现的位置

87320

全排列生成算法:next_permutation

观察pn可以发现,其子序列已经为减序,那么这个子序列不可能通过交换元素位置得出更大的序列了,因此必须移动最高位3(即a1)的位置,且要在子序列中一个数来取代3的位置。...子序列中6和4都比3大,6大于4。如果用6去替换3得到的序列一定会大于4替换3得到的序列,因此只能选4。将4和3的位置对调后形成排列。...而4是第1次作为首位的,需要右边的子序列最小,因此4右边的子序列应为,这样就得到了正确的一个序列pn+1=。 下面归纳分析该过程。...=72; 后3位的全排列为3!,7为{1, 4, 5, 7}中第3个元素,故3*3!=18; 后2位的全排列为2!,5为{1, 4, 5}中第2个元素,故2*2!...=4; 最后2位为增序,因此计数0,求和得:1440+120+72+18+4=1654 C++/STL实现 #include #include #include

89960

《算法竞赛进阶指南》0x16 Trie

,AC 自动机会在以后章节详细讲解 维护异或极值 边插边询问即可 维护异或和 插入 & 删除 板子基本功能 全局加一 从低位到高位开始第一个出现的 0,把它变成 1,然后这个位置后面的 1 都变成...ch] == 0) p = trie[p][ch]; else { res += 1 << i; p = trie[p][...数据范围 1≤n≤100000,\ 0≤u,v<n,\ 0≤w<2^{31} 输入样例: 4 0 1 3 1 2 4 1 3 6 输出样例: 7 样例解释 样例中最长异或值路径应为 0->1->2,...值为 7 = 3⊕4 解析 本题解法非常的秒,用到了异或的性质: x ⊕ x = 0 因此,求树上任意两点的异或路径长度 等价于 求他们各自到根节点的异或路径长度的异或值 证明如下,分类讨论即可: 第一种情况...ch]) p = trie[p][ch]; else { res += 1 << i; p

26920

挑战任务: 画动态时钟

挑战题不会做也木有关系,请务必在自行尝试后,再看下面的解答噢,不然...我也没办法( ̄▽ ̄)" 挑战解答 方案 本次挑战任务旨在提升大家的动手实践能力,解决实际问题,所以我们得先有个解题思路和方案。...绘制表盘 表盘上只有60条分/秒刻线和12条小时刻线,当然还有表盘的外部轮廓圆,也就是重点在如何画72根线。...根线就变成了获取72组坐标。...在平面坐标系下,已知半径和角度的话,A点的坐标可以表示为: \begin{matrix} x=r\times \cos\alpha \newline y=r\times \sin\alpha \end{...{matrix}x=r+r×cosαy=r+r×sinα​ 对于60条分/秒刻线,刻线间的夹角是360°/60=6°,对于小时刻线,角度是360°/12=30°,这样就得到了72组起点坐标,那怎么得到终点坐标呢

92410

函数之递归

这就涉及到了一个新的知识点—递归函数的最大深度 递归的最大深度深度 什么是递归函数的最大深度呢?   我们执行递归函数如果不受到外力的阻止会一直执行下去。...我说我不告诉你,alex比 egon 大两岁。 你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。...: print('找到了',mid_index,l[mid_index]) find(l,66) 二分法实现数据查找 ps:使用二分法查找数据数据必须是有序的列表方可 l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88...] def find(l,aim,start = 0,end = None): end = len(l) if end is None else end mid_index = (end..., end=mid_index-1) else: return mid_index else: return '找不到这个值' 进阶(终极版本

49620

#5 Python变量与输入输出

输出 前文可能已经接触到了输出语句 print,实际上在Python3中它是一个内置函数(关于函数的概念之后会讲),在Python常被成为打印,具体用法如下: 1.查看帮助信息 在IPyone中输入help...]: '520' 这里需要格外注意的是,输出的520是被单引号引起来的,这就是字符串,而不是数字了 二、Python变量 看到变量,这可能是所有萌新最头疼的地点,因为很难理解的概念,其实变量在小学就遇到了...数字或下划线的任意组合 变量的第一个字符不能是数字 关键字不能申明为变量,Python关键字有:and, as, assert, break, class, continue, def, del, elif, else...这次懂了哇,弟弟们ㄟ( ▔, ▔ )ㄏ 6.变量的交换 如果你有其他语言的基础,那么对于交换变量这一块一定很熟悉,你会毫不犹豫的说一个中间变量 t 不就行了,的确,Python也可以这样: In [55...57]: a,b Out[57]: (10, 20) In [58]: t=a In [59]: a=b In [60]: b=t In [61]: a,b Out[61]: (20, 10) 但是

1K30
领券