
Python算法训练
Small_Fish25
Stay Foolish Stay Hungry
展开
-
Python每日一练算法之各位相加(递归)
问题描述:给出一个非负整数num,反复将所有位的数字相加,直到得出一个位数位1的整数。问题示例:给出num=38,相加的过程位3+8 = 11,1+1 = 2,输出2代码实现:很明显,就是一个递归调用的解题思路class Solution: def addDigits(self,num): self.num = list(str(num)) self.num = list(map(int,self.num)) self.num = sum(self.nu原创 2020-05-21 21:51:26 · 1298 阅读 · 0 评论 -
Python每日一练算法之二进制求和
问题描述:给定两个二进制字符串,返回他们的和(二进制表示)问题示例:输入a=11,b=1,输出res = 100代码实现:class Solution: def addBinary(self,a,b): indexa = len(a)-1 indexb = len(b)-1 carry = 0 sum = " " while indexa >=0 or indexb >= 0: x = int(a[in原创 2020-05-21 19:58:12 · 494 阅读 · 0 评论 -
Python算法训练:collections.deque()的应用---“对称数”
问题描述:对称数是一个旋转180°后看起来一样的数,找到所有长度为n的对称数。问题示例:输入n=2,输出[“11”,“69”,“88”,“96”]代码实现:本例运用到了collections模块,并使用了模块中的deque介绍一些collections.deque():deque 是双边队列(double-ended queue),具有队列和栈的性质(即两头都可以Push和Pop),在 list 的基础上增加了移动、旋转和增删等。常用方法:创建一个deque对象:>>>原创 2020-05-17 16:33:15 · 531 阅读 · 0 评论 -
Python每日算法一练之“孤独的数”(异或操作的魅力)
问题描述:给出2n+1个非负整数的数组,除其中一个数字之外,其他每个数字均出现两次,找到这个数字。问题示例:给出[1,2,2,1,3,4,3],返回4。代码实现:class Solution: def singleNumber(self,A): ans = 0 for x in A: ans = ans^x return ansif __name__ == '__main__': temp = Solution() myl原创 2020-05-15 18:35:46 · 520 阅读 · 0 评论 -
Python每日一算法之“下一个更大的数”(列表模拟循环队列、栈)
问题描述:给定一个环形数组,即最后一个元素的下一个元素是数组的第一个元素(类似数据结构中的循环队列),为每个元素打印下一个更大的元素。数字x的下一个更大的数,是遍历数组的过程中出现的第一个更大的数字,这意味着可以循环搜索以查找下一个更大的数字;如果它不存在,则为此数字输出-1。给定的数组长度不超过10000.问题示例:输入[1,2,1],输出[2,-1,2]。代码实现:方法1:模拟循环队列class Solution: def getNextBiggerNumber(self,L,res,原创 2020-05-14 10:28:51 · 847 阅读 · 0 评论 -
Python每日一算法之”最接近k个数”(列表函数运用)
问题描述:给定一个目标数target,一个非负整数k,一个按照升序排列的数组A。在A中找出与target最接近的k个整数,返回这k个数并按照与target的接近程度从小到大排序,如果接近程度相同,那么值小的排在前面。问题示例:如果A=[1,2,3],target=2,k=3,那么返回[2,1,3];如果A=[1,4,6,8],target=3,k=3,那么返回[4,1,6];代码实现:其实就是考场对于python列表的操作,以及在python中列表函数应用。方法1:利用内置列表操作函数(有时候原创 2020-05-13 09:57:42 · 774 阅读 · 0 评论 -
Python每日一算法之“创建最大数”(优化提高)
问题描述:给定两个长度分别为m和n的数组,数组的每个元素都是数字0~9,从这两个数组中选出k个数字来创建一个最大值,其中k满足k<=m+n,选出来的数字在创建最大数里的位置必须与在原数组内的相对位置一致。返回k个元素的整数数组,尽可能优化算法的时间复杂度和空间复杂度。问题示例:给出num1=[3,4,6,5],num2=[9,1,2,5,8,3],k=5,返回[9,8,6,5,3];给出num1=[6,7],num2=[6,0,4],k=5,返回[6,7,6,0,4];代码实现:class原创 2020-05-12 10:19:40 · 569 阅读 · 0 评论 -
Python每日一练算法之“滑动窗口的最大值”(列表操作)
问题描述:给定一个可能包含重复整数的数组和一个大小为k的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口中的最大值。解释:也就是找到每个窗口中的最大值,加入到一个新的数组中,问题不难,个人觉得意在考察对列表的操作(max()、append()等方法),当然你也可以用自己写的max()、append()。问题示例:给出数组[1,2,7,7,8],k=3,输出[7,7,8]代码实现:class List_solution: def find_maxinSliding_window(s原创 2020-05-12 09:17:58 · 419 阅读 · 1 评论 -
Python每日一练算法之“下一个稀疏数”(递归,十进制转二进制字符串)
问题描述:如果一个数是稀疏数,则它的二进制表示中没有相邻的1,例如5(101)是稀疏数,但是6(110)不是稀疏数,本例将给出一个n,找出大于或等于n的最小稀疏数问题示例:给出n=6,返回8;给出n=4,返回4;给出n=38,返回40代码实现:从高位至低位逐位寻找是否有连续的1,一旦发现那么必须要将最高位的连续1消除(即产生进位),然后递归寻找。class Solution: def nextSparseNum(self,n): x_bin =bin(n)[2:] #将原创 2020-05-10 10:08:42 · 260 阅读 · 0 评论 -
Python每日一练算法之两整数相除(不使用乘法、除法和mod运算)
问题描述:要求不使用乘法、除法和mod运算符,实现两个整数相除,如果溢出,返回2147483647问题示例:输入100和9,输出11代码实现:import mathclass Dividend(object): def divide(self,dividend,divisor): MAX = 2147483647 if divisor == 0: return MAX symbol = dividend > 0 and原创 2020-05-09 15:26:04 · 1194 阅读 · 0 评论 -
Python每日一练算法之整数替换(DFS)
问题描述:给定一个正整数n,如果n为偶数,将n替换为n/2;如果n为奇数,将n替换为n+1或n-1,那么将n转换为1,最少的替换次数为多少?问题示例:输入8,输出3,即8->4->2->1;输入7,输出4,即7->8->4->2->1,或者7->6->3->2->1代码实现:解题思路其实就相当于因式分解,采用DFS算法c...原创 2020-05-08 13:35:06 · 807 阅读 · 1 评论 -
Python每日一练算法之整数排序(快排、冒泡)
使用IDLE python 3.7.7问题描述:给出一组整数,将其按照升序排序。问题示例:给出[3,2,1,4,5],排序后结果为[1,2,3,4,5]代码实现:方法1:冒泡排序#An integer sorting 整数排序def Creat_List(len): for i in range(L): num = int(input("输入一个数...原创 2020-05-07 18:31:00 · 774 阅读 · 2 评论