算法题(Python实现)
通过Python语言实现常见算法题
暴走辉
这个作者很懒,什么都没留下…
展开
-
排序(六)——快速排序
def quick_sort(nums): if len(nums) <= 1: return nums pivot = nums[0] left_nums = quick_sort([x for x in nums[1:] if x < pivot]) right_nums = quick_sort([x for x in nums[1:] if x >= pivot]) return left_nums + [pivot] +原创 2020-10-24 09:46:27 · 95 阅读 · 0 评论 -
排序(五)——归并排序
def merge_sort(nums): if len(nums) == 1: return nums length = len(nums) temp = length // 2 a = merge_sort(nums[:temp]) b = merge_sort(nums[temp:]) return merge(a, b)def merge(a, b): c = [] while len(a) > 0 an原创 2020-10-24 09:44:43 · 74 阅读 · 0 评论 -
排序(四)——计数排序
def count_sort(nums): min, max = nums[0], nums[0] for i in range(1, len(nums)): if (nums[i] > max): max = nums[i] elif (nums[i] < min): min = nums[i] sum = max - min + 1 count = [0] * sum原创 2020-10-24 09:43:27 · 92 阅读 · 0 评论 -
排序(三)——插入排序
def insert_sort(nums): length = len(nums) for i in range(1, length): unsort = nums[i] for j in range(i, -1, -1): if unsort < nums[j - 1]: nums[j] = nums[j - 1] else: break原创 2020-10-24 09:42:07 · 76 阅读 · 0 评论 -
排序(二)——选择排序
def selection_sort(nums): for i in range(len(nums)): # n pos_min = i # idx for j in range(i + 1, len(nums)): # n if (nums[j] < nums[pos_min]): pos_min = j nums[i], nums[pos_min] = nums[pos_min原创 2020-10-24 09:41:06 · 78 阅读 · 0 评论 -
排序(一)——冒泡排序
def buble(nums): lenth = len(nums) for i in range(lenth): is_sorted = True for j in range(1, lenth - i): if (nums[j] < nums[j - 1]): nums[j], nums[j - 1] = nums[j - 1], nums[j] is_sorte原创 2020-10-24 09:38:40 · 78 阅读 · 0 评论 -
从一串数字中找到加起来能得到目标数字的组合
含重复数字def comb2(candidates, t): result = [] lst = [] candidates.sort() comb2_helper(result, lst, candidates, 0) for exp in result: if sum(exp) == t: print(exp)def comb2_helper(result, lst, candidates, pos): res原创 2020-10-24 09:37:04 · 595 阅读 · 0 评论 -
从数组中选出所有可能的子集
给定一组不同的整数, 返回所有可能的子集解法1def Subset(nums): result = [[]] for num in nums: for element in result[:]: x = element[:] x.append(num) result.append(x) return resultif __name__ == '__main__': nums =原创 2020-10-24 09:34:02 · 340 阅读 · 0 评论 -
数学表达式
给定两个数字,如5和9,输出如何通过数学运算由5得到9def intSeq(a, b): if a == b: return str(a) if (b % 2 == 1): return '(' + intSeq(a, b - 1) + '+ 1)' if (b < 2*a): return '(' + intSeq(a, b - 1) + '+ 1)' return intSeq(a, b / 2) + '* 2)'原创 2020-10-24 09:30:15 · 229 阅读 · 0 评论 -
零矩阵变换
给一个m×n的矩阵,如果有一个元素为0,则把该元素对应的行与列所有元素全部变成0def zero(matrix): m = [None] * len(matrix) n = [None] * len(matrix[0]) for i in range(len(matrix)): for j in range(len(matrix[0])): if (matrix[i][j] == 0): m[i] = 1原创 2020-10-24 09:26:19 · 750 阅读 · 0 评论