数据结构
zdz0200
这个作者很懒,什么都没留下…
展开
-
常见排序Python实现
1. 归并排序# 合并两个有序数组def merge(a, b): c = [] i = j = 0 while i < len(a) and j < len(b): if a[i] < b[j]: c.append(a[i]) i += 1 else: ...原创 2018-08-09 17:26:14 · 203 阅读 · 0 评论 -
矩阵转置 -- Python
'''转置矩阵'''# 我写的def trans_matrix(a): m = len(a) n = len(a[0]) b = [[0] * m for i in range(n)] for i in range(m): for j in range(n): b[j][i] = a[i][j] retur...原创 2018-10-12 16:34:18 · 557 阅读 · 0 评论 -
字符串的编辑距离 -- Python
'''两个字符串的编辑距离edit[i][j]表示A串从第0个字符开始到第i个字符和B串从第0个字符开始到第j个字符,这两个字串的编辑距离。字符串的下标从1开始。递推公式:'michaelab' 变成 'michaelxy'if b==y: d[i][j] = d[i-1][j-1]if b!=y: 添加:michaelaby michaelxy d[i][j] ...原创 2018-09-14 15:42:50 · 2909 阅读 · 0 评论 -
python lists/sets操作
1. 判断两个list/set是否相等len(l1)== len(l2)2. 判断元素是否在list/set中if i in l1: print(i)if i not in l1: print(i)3. 返回列表中元素最大/最小值min_l1 = min(l1)max_l1 = max(l1)4. 集合是用{}生命的,列表是[] 添加元素...原创 2018-09-19 11:37:48 · 202 阅读 · 0 评论 -
从一个序列中找出所有包含全部数字的最小索引区间 -- Python
感jio写的有问题。。先记录一下吧。。'''问题:从一个序列中找出所有包含全部数字的最小索引区间,若有多个则按出现的顺序输出。输入输出示例:输入:1 1 3 4 6 6 5 1 3 3输出:[2,7] [3,8] [4,9]'''def solution(nums): res = [] # 记录最小区间长度 d = [] len_nums =...原创 2018-09-19 11:27:06 · 1094 阅读 · 0 评论 -
Python -- sorted函数
1. sorted()函数对所有可迭代的对象进行排序操作。sorted( iterable[, cmp[, key[, reverse]]] )iterable -- 可迭代对象。 cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。 key -- 主要是用来进行比较的元素,只有一个参数,具体...原创 2018-09-18 20:18:09 · 217 阅读 · 0 评论 -
走格子取数 -- Python
1. 无障碍的走格子/棋盘'''m*n无障碍的格子, 每次只能往右或者下走dp[i][j]为到i,j这里有多少种走法递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始矩阵:dp[0][j],dp[i][0]都为1'''def solution(m, n): dp = [[0] * (n) for i in range(m)] ...原创 2018-09-18 20:16:06 · 2478 阅读 · 0 评论 -
最长连续递增子序列 -- Python
'''最长连续递增子序列dp[i]以nums[i]结尾的最长递增子序列的长度if nums[i] > nums[j], 说明nums[i]能缀到nums[j]后面,那么dp[j]就能+1了dp[i+1] = max(dp[i + 1], dp[j] + 1)'''def length_of_lis(nums): len_nums = len(nums) ...原创 2018-09-18 18:06:52 · 6774 阅读 · 2 评论 -
求边界点 -- Python
问题描述:P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。代码实现:# -*- coding...原创 2018-08-24 15:53:18 · 4764 阅读 · 4 评论 -
赛码网和牛客网python输入输出要求
1. 牛客网推荐使用sys.stdin.readline()形式输入,输出用print()'''输入:2 3 分别赋给n, m并且转换为int类型'''import sysn, m = map(int, sys.stdin.readline().strip().split())print(type(n))print('n', n)print('n', m)结果:3...原创 2018-08-28 17:12:11 · 17157 阅读 · 0 评论 -
二分查找 --Python
二分查找要求查找数组为有序的,所以得先sorted()一下。递归实现:# 递归def binary_search(num, l_new): mid = len(l_new)//2 if num > l_new[mid]: return binary_search(num, l_new[mid+1:]) elif num < l_new...原创 2018-08-17 18:03:40 · 202 阅读 · 0 评论 -
单链表反转 -- Python
def invert_list(head): if head.next is None: return head new_head = invert_list(head.next) # 1 - 2 - 3 # head是2 head.next是3 head.next.next是3的指向 2给3的指向,也就是3 - 2 head.n...原创 2018-08-14 17:42:08 · 774 阅读 · 0 评论 -
二叉树的前中后序遍历及反转 -- Python
代码实现:# 前序遍历:中左右def pre_order(bt): if bt is None: return print(bt.val) pre_order(bt.left) pre_order(bt.right)# 中序遍历def mid_order(bt): if bt is None: return...原创 2018-08-14 15:30:19 · 1098 阅读 · 0 评论 -
最大公约数和最小公倍数 -- Python
'''输入两个数m, n求两个数的最小公倍数和最大公约数思路:设两个整数u和v,用辗转相除法求最大公约数的算法如下: 例如: u=4和v=6if v>u if v>u即:4<6将变量u与v的值互换(使大者u为被除数) ...原创 2018-10-12 16:39:07 · 943 阅读 · 0 评论