算法与数据结构的奇妙技巧
文章平均质量分 71
本堂町小春
这个作者很懒,什么都没留下…
展开
-
求最大公约数的奇妙技巧
最大公约数题目:求正整数a和b的最大公约数gcd(a, b)普通方法:假设a < b,遍历i从a到1,如果a和b均能整除i,则i即为所求。def gcd(a, b): if a > b: a, b = b, a for i in range(a, 0, -1): if a % i == 0 and b % i == 0: return a奇妙技巧:对于两个数a和...原创 2020-03-27 16:50:12 · 255 阅读 · 0 评论 -
洗牌算法的奇妙技巧之绝对公平的算法
引言逛知乎时,看到一个问题:世界上有哪些代码量很少,但很牛的算法?有一个回答提到了洗牌算法。(在此感谢程序员吴师兄的回答,原文链接找不到了)看完之后,惊为天人,特此记录,致敬一下发明算法的大神。题目描述扑克牌大家都玩过吧?有没有想过三人斗地主是怎么发牌的呢?一言以蔽之,洗牌算法要求我们设计一个公平的算法去完成洗牌。解决方案?洗牌?那就随机交换其中的两个数k次吧。k取多少呢?对于n ...原创 2020-03-09 00:07:39 · 423 阅读 · 0 评论 -
1~n整数中1出现的次数的奇妙技巧之“完爆官方,包学包会包拓展,告别死记硬背”
题目再现输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。来源:力扣(LeetCode)奇妙解答以大家熟知的数字“1024”为例,图文并茂的讲解:首先,定义一个n的第i位为从右数第i个数。先分析个位(第一位),从0~1024的所有数中,个位会产生多少个1呢?我们举例来看,0 ...原创 2020-03-08 00:51:56 · 316 阅读 · 2 评论 -
排序算法中体现出的奇妙思想
排序算法中的奇妙思想注意:本文的重点是分析排序算法中体现的一些重要是算法思维,旨在掌握排序算法的核心思想,并举一反三,并不是排序算法的入门科普,故不会详细介绍各种算法,但也会给出各种算法的Python实现,本文的结构如下:十大排序算法总结选择、冒泡、插入、希尔排序的算法实现归并、快排、堆排、桶排的详细剖析(奇妙思想的发源地)一、十大排序算法总结排序方法平均时间复杂度最优...原创 2020-03-07 15:50:28 · 345 阅读 · 0 评论 -
大数乘法的奇妙技巧
大数乘法解决问题:A * B = K两种方法及其衍生:小学乘法(时间复杂度O(n2)) 3 4 5x 1 8 7—————————————————————— (21)(28)(35) (24)(32)(40)( 3)( 4)( 5)——————————————————————( 3)(28)(58)(68)(35) ...原创 2020-03-06 12:01:18 · 517 阅读 · 0 评论 -
汉明距离的奇妙技巧
汉明距离(二进制数中1的个数)题目描述:输出十进制数n的二进制形式中1的个数。常规方法:循环右移,每次与1判断,时间复杂度O(logn),解释一下,循环次数为最高位1所在位置,以4为例,4 = 0b0100, log24 = 2。奇妙技巧:n & (n - 1)可以消除n最右侧的1def HanmingDistance(n): count = 0 while n >...原创 2020-03-05 22:39:25 · 534 阅读 · 0 评论 -
大数运算的奇妙技巧之“快速幂”
快速幂当遇到题目要求输出返回值要%1E7的时候,基本上,该题最终可以写成ab的形式,可以用“快速幂”方法在O(logn)的时间复杂度求解ab。核心思想:b可以展开为二进制,以a3次方为例,3 = 0b011。a3 = (a1)1 * (a2)1 * (a4)0发现:a1 → a2 → (a2)2→ …,可以通过分治法,不断迭代求得当b的某位为1时, 它将会纳入最终结果的运算。上述方法...原创 2020-03-05 22:18:51 · 418 阅读 · 0 评论