数据结构与算法
使用Python实现一些数据结构和算法的模板
烟雨人长安
空气,水,食物,书是生命中必不可少的四项事物!
展开
-
二分查找返回第一次查到的位置和最后一次查到的位置
第一次查到的位置:def left_bound(nums,target): low = 0 high = len(nums)-1 while low<=high: mid = low+(high-low)//2 if nums[mid]<target: low = mid+1 elif nums[mid]>target: .原创 2020-12-22 11:40:21 · 426 阅读 · 0 评论 -
Python实现笛卡尔乘积的几种方法
引言:面试的时候面试官出的这道题,当时写的不是太好,面试结束后下来查了一下,发现大部分的博客都是使用工具包来实现,而且大部分的博客内容还都完全一样,连数字都没有变,找了半天也没找到几个有用的博客。其实这也是现在大部分博客的风气,互相抄袭,没有一点自己的思考内容,我都不明白写这样的博客有什么意义。所以自己打算实现一个不使用工具包来解决的方法,于是在别人的博客帮助下,实现了用回溯法来解决笛卡尔乘积,下面是总结一下解决这个问题的几个方法:1、工具包from itertools import produc原创 2020-11-17 16:05:49 · 9934 阅读 · 0 评论 -
动态规划模板——Python版本
此文是来自https://leetcode.com/discuss/general-discussion/458695/Dynamic-Programming-Patterns这位外国网友,本人负责汉化目录一、达到目标的最小(最大)路径型问题二、不同的方式三、合并区间四、字符串DP问题四、做决策问题一、达到目标的最小(最大)路径型问题此类问题的描述为:给定目标,找到达到目标的最小(最大)成本(cost)/路径(path)/总和 (sum)。通用模板代码为:for..原创 2020-11-09 20:22:02 · 1082 阅读 · 0 评论 -
关于回文的常见题目
1、最长回文子串这道题要好好说一下,做了好几次了,做完过一段时间又忘了,所以总结一下,以后忘得时候拿出来看,用两种比较好理解的方法来做先上动态规划的代码class Solution: def longestPalindrome(self, s: str) -> str: if not s: return '' n = len(s) maxlen = 0 res = 0 dp =原创 2020-09-23 22:29:18 · 322 阅读 · 0 评论 -
关于回溯的常见题目
这里的回溯直接用的labuladong的算法框架,回溯解释1、全排列class Solution: def permute(self, nums: List[int]) -> List[List[int]]: def dfs(nums,temp): if len(temp) == len(nums): res.append(temp[:]) for i in range(len(num原创 2020-09-20 12:03:35 · 262 阅读 · 0 评论 -
那些和“公共“有关的算法题
一、二叉树类1、二叉树的最近公共祖先class Solution: def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode: if not root or root == p or root ==q: return root left = self.lowestCommonAncestor(root.left,p,q原创 2020-09-16 23:56:14 · 618 阅读 · 0 评论 -
递增子序列的相关题目总结
目录1.最长连续递增序列2.最长上升子序列3、最长递增子序列的个数4、递增子序列5、最长连续序列这里总结一些递增子序列的相关题目,有的题目中会有最优解,但是这里主要关注的是动态规划的做法,所以只写出动态规划或者通用的一些方法。介绍这些题目之前,先分清一下什么是子序列,什么是子串子序列:子序列是不连续的,如序列[4, 6, 5]是[1, 2, 4, 3, 7, 6, 5]的一个子序列子串:子串是连续的1.最长连续递增序列输入: [1,3,5,4,7]...原创 2020-06-23 19:28:10 · 462 阅读 · 0 评论 -
面试算法和数据结构中那些和 “K” 相关的题目
本文会列举几道比较常见的和 “K” 相关的问题,有的问题在我的另一篇博客里做了详细的解释,所以这篇文章里我就不做太多解释一、链表1、返回倒数第 k 个节点输入: 1->2->3->4->5 和 k = 2输出: 4...原创 2020-06-11 09:39:00 · 312 阅读 · 0 评论 -
堆排序的两种方法实现(Python)以及面试中关于堆排序的相关题目
一、堆排序的两种做法对堆排序完全没有了解的同学,可以先看一下B站上的这个视频https://www.bilibili.com/video/BV1Eb41147dK/同时,堆排序的第一种做法也是基于这个视频的。1、堆排序的第一种做法def heapify(arr,n,i): large = i #父节点的下标为i left_child = 2*i+1 #左孩子下标 right_child = 2*i+2 if left_child<n and arr原创 2020-06-09 10:34:28 · 758 阅读 · 0 评论 -
Python实现常见的链表问题
1.环形列表class Solution: def hasCycle(self, head: ListNode) -> bool: if not head or not head.next : return False slow = head fast = head while (fas...原创 2020-03-27 11:49:40 · 811 阅读 · 0 评论 -
Python实现二叉树的一些套路模板
总结一些二叉树的模板原创 2020-03-10 14:49:29 · 446 阅读 · 0 评论 -
Python实现几种常见的排序算法
目录1.冒泡排序2.选择排序3.直接插入排序4.归并排序5.快速排序6.堆排序7.几种排序算法比较1.冒泡排序def bubbleSort(nums): for i in range(0,len(nums)-1): for j in range(i+1,len(nums)): if nums[i]>nums...原创 2020-03-10 15:33:44 · 332 阅读 · 0 评论