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

Leetcode【435、452、738、991】

Monotone Increasing Digits 解题思路: 这道题是给一个数字 N,找到小于等于 N 单调递增数字。...,找到第一个逆序对(如 481 第一个逆序对是 (8, 1));然后,将逆序对第一个位置处数字减 1,后面补够 9;最后,答案为:逆序对前面的数字 + 逆序对位置处数字减 1 + 逆序对后面补够...注意:如果是 13555884 这种,结果应该为 13555799,但是按照上述规律会得到 13555879 错误答案。...对于 X < Y,刚开始想是用广搜 BFS 求解: 从M走到N最少步数,但是由于 X 和 Y 取值范围都为 10^9 次方,开辟一个 10^9 空间会造成内存溢出(最大只能开 10^8 次方空间大小...这是一种贪婪思想,即每次考虑让 Y 先除以 2,不行的话再执行加 1 操作。时间复杂度为 O(log Y),空间复杂度为 O(1)。 为什么这样会得到正确答案

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

Python 刷题笔记:数组专项练习一

我们分析满足条件数字规律,20 + 40 可以,80 + 40 也可以,20 和 80 等效、其相同点是整除 60 结果是相同。...所以,关键点来了,时间列表中每个数字可能差异极大,但对题目生效只有该数整除 60 余数结果:余数为 1 余数为 59 组合必然满足题意要求。 拿到所有余数,其范围是 0 到 59。...假设余数为 1 10 个,余数为 59 有 5 个,那么我们可以算出它们可以生成 10x5 = 50 对有效结果;但这里特殊余数为 0 和 30 ,假设余数为 30 数字10 个,那么产生不重复有效结果为...limit = add_min # 若 while 循环结束,则 lst 即合并目标天数完成每天重量列表,返回其最大值 return...刚我们超时方案, while 循环中不断探索这个重量限制,虽然也是不断接近目标值,但二分法明显会效率更高。

1.2K20

Python3基础

,每个变量使用前都必须赋值,变量赋值才会被创建。...二、Python3运算符 1、算术运算符 加(+):两对象相加 减(-):两对象相减 乘(*):两个数相乘或是返回一个被重复若干次字符串 除(/):x除以y 取模(%):返回除法余数 幂(**):返回...in:如果在指定序列中找到值返回 True,否则返回 False。 not in:如果在指定序列中没有找到值返回 True,否则返回 False。 Python3成员运算符示例如下: #!...每个条件使用冒号(:)表示满足条件要执行语句块。 条件控制中使用缩进来划分语句块,相同缩进数语句在一起组成一个语句块。 Python中没有switch – case语句。 #!...2、循环控制 Python中循环语句有for和 while。Python中while语句一般形式如下: while 判断条件: 语句 Python中没有do…while循环

1.2K10

Python中查找质因数

质因数分解概述在数学中,一个数因数是指那些可以除以给定数并留下零余数数字。质数是只有两个因数独特数字,一个和数字本身。这类数字一些例子是3,7,11,13,等等。...素数因数化是指找到所有乘以原数素数。我们可以考虑一个简单例子:数字6。这个数字质因数分解产生了两个因子,即2和3。Python中寻找质因数不同方法我们可以用不同方法找到指定数字质因数。...执行质因数分解自定义函数在数学中,最基本质因数分解方法是重复除法。我们重复地用数字除以质数。我们可以Python中使用嵌套循环来实现这一点。第一个循环确定一个数字是否是素数。...第二个循环将这个质数和给定数字相除。如果余数为零,我们就把这个质数追加到一个列表中。该函数返回最后列表。请看下面的代码。...它标记了小于给定数值,并可被素数平方除以,以返回小于给定数所有素数。我们可以用它在Python中进行素数分解。首先,我们找到低于所需数字质数,然后用这些质数除以给定数字,以查看其质因数。

19320

一个余数问题思考

我看贴吧里有些人审题不严,导致做了一个错误答案。 经过一番分析,上面的题目就变成了下面这样。...奇数 能被9整除 除以4余1 除以5余4 除以6余3 能被7整除 除以8余1 注意到7和9互质,所以答案必然是63倍数,而且还是个奇数,所以是奇数倍。所以我们代码可以改进一下。...由于这个数除以5余4,可以想到该数个位数字不是4就是9,但是由于是奇数,那么个位数必然是9,而且这个数是63倍数。而除以4余1和除以8余1这两个条件可以简化为除以8余1。...由于我数学不好,也不懂数论这些专业知识,所以直接用代码模拟一下,发现确实可以得到一个数,让答案加上这个数以后,所有余数都相同。这个数是1071,这时候余数都是0 。Kotlin代码如下。...答案加上1071之后,可以被2-9所有数整除,所以2-9最小公倍数再减去1071,就是我们要求答案

88590

程序员数学---数学思维锻炼

我们这一次还是利用余数思想: 10^0 = 1 除以 7 结果为 0 余 1 10^1 = 10 除以 7 结果为 1 余 3 10^2 = 100 除以 7 结果为 14 余 2 10^3 = 1000...142857142857 余 1 我们已经可以看出规律了,余数以 1、3、2、6、4、5 顺序循环,也就是说,1 后面每增加 6 个 0,余数也即星期数和增加前相同。...3、 1 2 这两个数字中查找数字 2 ,此时我们取得中间那个数应该是 1 ,小于 2,于是 1 右边 3 左边查找。...4、 1 右边和 3 左边就只有 2 了,那么数字 2 就被找到了,如果还没找到,证明这个数组没有要查找数字。 在这里为什么我们要对数组进行排序呢?...,只能对某一些特定数字来判断其是否符合哥德巴赫猜想。

99541

Leetcode【789、1017】

Escape The Ghosts 解题思路: 这道题是二维平面上有一个人从原点出发,每次移动一个单位(东南西北)到目标坐标 target,平面上还有一些鬼 ghosts 每次也移动一个单位到目标坐标...因此,只需要遍历一次 ghosts 数组,找到移动最少步数鬼,然后和人移动步数做对比。如果人步数小于鬼最少步数,返回 True;否则返回 False。...我们已经知道将十进制数转化为二进制数做法:将数不断除以 2,然后记录余数,最后将余数反转。如果对于转为负二进制采用同样思路,余数会出现负数(-1),怎么办?...当 N 为 0 时,我们将每次记录余数进行反转,就是答案。 因为每次都执行除以 -2 操作,则时间复杂度为 O(logN)。..."0" ans = "" while N !

39310

leetcode-166-分数到小数(用余数判断有没有出现小数循环体)

但这样还是错误,因为其实出现重复位不代表这个时候就开始循环了,比如1315/10000=0.1315,第二个1出现时候,仍然不是循环。...如果按照上面所说方法,这时候出现了重复位,最终结果是0.(13)。 所以究竟循环体出现标志是什么?我们研究一下1/6。 最开始补零,变成10/6,写成0.1,这时候余数是4。...余数4再去除以6,变成40/6,写成0.16,这时候余数是4,。 余数4再去除以6…… 这个时候我们都知道接下来必定是循环体结构了,因为出现了相同被除数。...;//如果还有余数,那么要加个小数点 unordered_maprecord;//记录出现过余数余数除以除数得到位置 while(yushu!...;//除数也转为正数 yushu*=10;//余数10,作为新被除数 if(record.count(yushu))//如果之前出现过了这个余数,那么可以取出循环体了

3K50

日拱一卒,伯克利实验课太有意思了,入门Python函数式编程

Required Questions 必做题 Q1: GCD 古希腊数学家欧几里得公元前300年就想出了计算a和b最大公约数方法,a和b两数最大公约数为: 如果a和b当中较小数能整除较大数,...则为较小数,或者 较小数和较大数关于较小数余数最大公约数 这段话看起来有些拗口,转换以下,也就是说,当a大于b时,如果a不能被b整除,那么结果就是: gcd(a, b) = gcd(b, a % b...x > 0: x, y = _____, f() return y == n 完成,使用Ok进行测试:python3 ok -q is_palindrome 答案 函数最后返回结果是...ten-pair是指n中一对加起来等于10数字。不要使用赋值语句。 比如数字7823952拥有3个ten-pair,分别是7+3=10, 8+2=10, 8+2=10。...提示:使用helper函数来计算n中每一个数字出现次数 完成之后,使用ok进行测试:python3 ok -q ten_pairs 答案 由于题目限制了不能使用赋值语句,所以难度增加了不小,所以我们只能使用递归去获取我们想要结果

46220

你知道中国剩余定理与贝祖定理吗?

事实上,不管物体总数除以 3 余数除以 5 余数除以 7 余数分别是多少, 0 到 104 当中总存在唯一解;在这个解基础上再加上 105 整数倍,可以得到其他所有的正整数解。...下表显示就是各自然数除以 4 和除以 7 余数情况,其中 mod 表示 除以 余数,这个记号后面还会用到。...mod 4 值显然是以 4 为周期循环, mod 7 值显然是以 7 为周期循环。...比如说 3,由于 3 和 10 是互质,那么根据中国剩余定理, 0 到 29 之间一定有这样一个数,它除以 3 余 0,并且除以 10 余 1。它将会是 3 某个整倍数,并且个位为 1。...如果 和 是互质,那么根据中国剩余定理,这样 一定存在,并且找到一个这样 之后,基础上加减 · 整倍数,可以得到所有满足要求

63520

日拱一卒,伯克利教你学Python,一次弄懂迭代器生成器

推论:一个可迭代对象就像是一本书(可以纸张之间翻动浏览)而迭代器就像是书签(保存位置,可以快速找到下一页)。对一本书调用iter会得到一个书签,书签之间彼此互不影响。...print(tuple(map(lambda x: x + 2, e))) ... ______ 题目不算难,但当中有一些题还是挺刁钻,需要仔细想想。..."*** YOUR CODE HERE ***" 使用ok进行测试:python3 ok -q scale 答案 我们可以使用for循环迭代一个可迭代对象,将拿到结果yield即可。...remainders_generator读入一个整数m,yield m个不同生成器。第一个生成器是m倍数(对m取模余数为0),第二个生成器是对m取模余数为1生成器,以此类推。...使用ok命令来进行测试:python3 ok -q remainders_generator 答案 我们一个生成器内部实现一个生成器,然后在外部调用内部生成器,返回生成器对象。

44120

Python3快速入门(二)——Pyth

,每个变量使用前都必须赋值,变量赋值才会被创建。...二、Python3运算符 1、算术运算符 加(+):两对象相加 减(-):两对象相减 乘(*):两个数相乘或是返回一个被重复若干次字符串 除(/):x除以y 取模(%):返回除法余数 幂(**):返回...in:如果在指定序列中找到值返回 True,否则返回 False。 not in:如果在指定序列中没有找到值返回 True,否则返回 False。 Python3成员运算符示例如下: #!...每个条件使用冒号(:)表示满足条件要执行语句块。 条件控制中使用缩进来划分语句块,相同缩进数语句在一起组成一个语句块。 Python中没有switch – case语句。 #!...2、循环控制 Python中循环语句有for和 while。Python中while语句一般形式如下: while 判断条件: 语句 Python中没有do..while循环。 #!

80040

Leetcode 【553、609、856、1003、1023】

Optimal Division 解题思路: 这道题是给一个数组,各个数字连除,通过加括号,使得除操作结果最大。刚开始想着是遍历所有加括号方式,然后求出最大结果。但是,发现加括号规律很麻烦。...后来又重新读了一下题目,发现数组中数字取值是 [2,1000]。就这说明,如果我们不加括号,n1/n2/n3/n4/n5 只会越除越小。那么加括号如何保证最大结果呢?...其实很简单,我们只需要在第二个数到最后一个数加括号即可,得到 n1/(n2/n3/n4/n5),因为 n2/n3/n4/n5 是能过够获得最小除数因子,然后 n1 作为被除数,除以一个最小除数,当然能获得最大结果...elif len(nums) == 2: return str(nums[0]) + "/" + str(nums[1]) else: # 第二个数前到最后一个数加括号就是答案...因此,当遍历完 S ,栈中剩下一定是非零数 [6 6],这些非零数满足规则 2 (AB),因此对它们求和就是最终答案 12。

45330

日拱一卒,一起来上伯克利实验课,让你Python溜起来

,我们还可以每次取出n最后两位,如果这两位等于88,则返回True,否则将n除以10,相当于去掉最后一位,继续判断最后两位是否是88,直到n小于10为止。...随机猜测可行,但你需要开发更好策略。 Q10: Guess Linear guess_random策略一个弱点就是它可能会重复猜测某些错误数字,所以我们可以使用线性猜测让它更加合理。...目前为止,我们范围只有1到10,如果我们把它延伸到1到100会怎么样,你觉得1到100范围内,每一个算法会需要猜测多少次能猜到答案?...python3 guessing_game_graph.py guess_linear python3 guessing_game_graph.py guess_binary 每一个柱表示了算法找到正确结果猜测次数...一个好算法带来优化和价值一些场景中是非常非常巨大。 喜欢本文的话不要忘记三连~

59930

C语言大数运算-乘除法篇「建议收藏」

,所以不再赘述,我会先介绍大数乘法载介绍大数除法,乘法难点在于要使用一个嵌套循环,除法难点在于一个字使用符串比较方法技巧,本次还是会将算法都写成函数,然后main()函数中调用,原因是第四篇我们要将整个大数运算方法做成自己一个库文件...其实问题也很好解决,前两个问题都可以看出答案,最后一个问题和前两篇博客进位问题很相似,所以简单说明后再看注释代码是很好懂。 1 二个数相乘最大位数是两个乘数位数之和。...2 很明显由于乘法特性使用嵌套循环很合适。 3 大数加减中执行完毕再对存储结果result数组进行一次进位,但在乘法中我们需要每执行一趟就要对数组进行进位处理。...注意: 除法对数据有限制不能分母为零,分母为零没有意义,不能用小数除以大数,因为小数除以大数本质还是大数除以小数结果加个分之一就可以了。 返回结果是保存商数组指针,不包含余数。...lenb相等时跳出循环,因为会不断divb数组前加0所以该数组长度, 20 //会不断变化当两者相等时说明已经无法作减法

1.3K10
领券