随笔分类 - python实现算法学习
摘要:一、方法1 代码如下 ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids 思路看起来比较清晰简单 ,也可以保持之前的排
阅读全文
摘要:# 基数排序有着局限性,只能是整数,# 排序的时候要先排后面一个条件的(多条件排序)#如本例中,先从个位开始排起# 多关键字排序# 从低关键字开始排序 # @File: radix_sort ############################################## # def get_digit(num, i): # 获取整数第i位数字 # # return n...
阅读全文
摘要:# @File: maze_queue_bfs from collections import deque maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 0, 0, 1, 1,...
阅读全文
摘要:# @File: maze_stack_dfs maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 0, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 1, ...
阅读全文
摘要:计数排序有局限性,最小值和最大值决定着数组的长度,如果分配均匀的话可以用 # @File: count_sort import random def count_sort(li, max_num=100): count = [0 for i in range(max_num + 1)] for val in li: count[val] += 1 l...
阅读全文
摘要:与插入排序的思想一致,插入排序是一个,希尔排序是多个插入排序! # @File: shell_sort import random def insert_sort_gap(li, d): for i in range(d, len(li)): j = i - d temp = li[i] while j >= 0 and li[j] ...
阅读全文
摘要:import math def is_prime_1(n): if n n: return True if n % i == 0: return False def is_prime_4(n): if n <= 1: return False if n == 2: r...
阅读全文
摘要:# 构建小顶堆跳转def sift(li, low, higt): tmp = li[low] i = low j = 2 * i + 1 while j li[j]: li[i] = li[j] i = j j = 2 * i + 1 else: ...
阅读全文
摘要:import random from timewrap import cal_time # 一个计算时间的装饰器 def merge(li, low, mid, high): i = low j = mid + 1 li_tmp = [] while i <= mid and j <= high: if li[i] <= li[j]: ...
阅读全文
摘要:def hanoi(n, A, B, C): if n > 0: hanoi(n-1, A, C, B) print("%s->%s" % (A, C)) hanoi(n-1, B, A, C) hanoi(4, 'A', 'B', 'C')
阅读全文
摘要:import time def cal_time(func): def wrapper(*args, **kwargs): t1 = time.time() result = func(*args, **kwargs) t2 = time.time() print("%s running time: %s secs." ...
阅读全文
摘要:def quick_sort(array): if len(array) = array[0]]) def quick_sort(array): if len(array) = array[0]]) arr = [3, 1, 6, 8, 2, 2, 3] res = quick_sort(arr) print(res)
阅读全文
摘要:# 最长上升子序列 class Solution: """ @param nums: An integer array @return: The length of LIS (longest increasing sequence) """ def longest_increasing_sequence(self, nums): # wr...
阅读全文
摘要:树和二叉树简介 一、树 1、什么是树? 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父
阅读全文
摘要:输出由1,2,3,4组成的互不相同且无重复的三位数! #方式一 lst = ['1', '2', '3', '4'] res = [] for i in lst: for j in lst: for k in lst: # print(set(i + j + k)) if len(set(i + j
阅读全文
摘要:# 斐波那契数列是学计算机入门最经典的一道题目 # 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci) # 以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上, # 斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, ...
阅读全文
摘要:比如,斐波那契数列:1,1,2,3,5,8,13,21,34.... 用列表生成式写不出来,但是我们可以用函数把它打印出来: def fib(number): n, a, b = 0, 0, 1 while n 注意: ...
阅读全文
摘要:[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36,...
阅读全文
摘要:二分查找 每次能够排除掉一半的数据,查找的效率非常高,但是局限性比较大。 必须是有序序列才可以使用二分查找。 1.非递归算法 def binary_search(lis, nun): left = 0 right = len(lis) - 1 while left lis[mid]: #如果查询数字比中间数字大,那么去二分后的右边找 ...
阅读全文