leetcode
文章平均质量分 52
通过刷题来分类理解数据结构与算法
旺旺棒棒冰
做正确的事,正确得做事
展开
-
python实现简单选择排序以及堆排序
# coding: utf-8"""@File : select_sort.py@Time : 2022/5/10 18:21@Author : liuwangwang@Software: PyCharm"""class Sort: def __init__(self): pass def select_sort(self, arr): """ 选择排序,假设前面的i-1个元素已经有序,处理第i个元素:与.原创 2022-05-12 14:12:53 · 289 阅读 · 0 评论 -
联想回文字符串的编程题
1. 判断是否是回文序列,输入是整数或者字符串import stringdef isPalindrome_str(s: str) -> bool: """ 判断是否视回文字符串,不考虑非字母字符 O(n)的时间复杂度 """ n = len(s) i = 0 j = n - 1 while i < j: while i < n and s[i] not in string.ascii_letter原创 2021-11-25 10:41:26 · 349 阅读 · 0 评论 -
leetcode求众数
哈希法class Solution: def majorityElement(self, nums: List[int]) -> int: # 时间复杂度o(n) # 空间复杂度O(n) dict_num = {} for item in nums: if item in dict_num: dict_num[item] +=1 else:..原创 2021-09-20 23:40:50 · 310 阅读 · 0 评论 -
分治,递归,贪心算法,动态规划的关系
来自书籍《王道程序员面试宝典》转载 2021-09-09 14:32:15 · 111 阅读 · 0 评论 -
二叉搜索树的公共祖先,二叉树的最近公共祖先
二叉树的定义:# Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None二叉树的构建:在这里插入代码片235. 二叉搜索树的最近公共祖先二叉搜索树按照中序遍历是有序的,左孩子所有结点的值都小于根结点,右孩子所有结点的值大于根结点使用递归的方法:原创 2021-09-08 12:06:59 · 607 阅读 · 0 评论 -
leetcode链表中的两数相加问题
2. 两数相加找出两个链表中较长的链表,原地修改后,作为最后的返回结果两个链表从前往后遍历,考虑进位,直到短链表结束。将长链表数值放入结果(考虑进位)。考虑是否需要额外增加一个结点来放进位class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: # 最重要的是处理进位的问题 if not l1: return l2 if not原创 2021-09-07 12:22:15 · 113 阅读 · 0 评论 -
leetcode两数之和,三数之和,四数之和问题
1. 两数之和遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回。若列表中的与元素有重复也可这样处理,因为遍历的过程中,不包含当前元素。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: n = len(nums) if n < 2:原创 2021-09-07 11:40:54 · 171 阅读 · 0 评论 -
leetcode哈希表解决异位词问题
哈希表散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。它通过计算出一个键值的函数(hash function),将所需查询的数据映射到表中一个位置来让人访问,这加快了查找速度。哈希函数构造哈希函数方法直接定址法数字分析法平方取中法折叠法随机数法除留余数法哈希冲突一个好的哈希函数,应该尽可能的避免冲突冲突:k1≠k2k1≠k2,而f(k1)=f(k2)f(k1)=f(k2){\displaystyle k_{1}\neq k_{原创 2021-09-07 11:14:24 · 135 阅读 · 0 评论 -
python堆结构heapq
堆是一种二叉树结构,python中的堆是小根堆。每个父节点的值都小于或等于它的任何子节点;即对于任何一个结点kkk,都满足:a[k] <= a[2*k+1] a[k] <= a[2*k+2] 最小的元素总是根元素。heapq模块是通过优先队列算法实现的。方法功能heapq.heappush(heap, item)将 item 的值加入heap中,保持堆的性质。heapq.heappop(heap)弹出并返回heap的最小的元素,保持堆的性质。如果堆为空,翻译 2021-08-27 13:24:09 · 564 阅读 · 0 评论 -
python实现编辑距离,最长公共子序列,最长公共子串
python实现编辑距离python实现最大公共子序列python实现最长公共子串原创 2021-08-24 15:18:07 · 215 阅读 · 0 评论 -
python实现最长公共子串
介绍子串和子序列的意思不一样,如下图所示,子序列不要求连续,只需要在给定序列中出现过,并且相对顺序一致。而子串需要连续。图片来自动态规划 最长公共子序列 过程图解最长公共子串:同时出现在两个字符串中的最长子串实现使用动态规划的方法,递推公式如下:dp[i,j]dp[i, j]dp[i,j]表示以第iii个字符结尾的字符串xxx与以第jjj个字符结尾的字符串yyy之间的最长公共子串长度dp[i,j]={0 若 i=0 或 j=0dp[i−1,j−1]+原创 2021-08-24 15:14:36 · 9083 阅读 · 4 评论 -
python实现最大公共子序列
介绍子序列和子串的意思不一样,如下图所示,子序列不要求连续,只需要在给定序列中出现过,并且相对顺序一致。而子串需要连续。图片来自动态规划 最长公共子序列 过程图解最长公共子序列(LCS):同时出现在两个字符串中的最长子序列实现1143. 最长公共子序列思想和求解两个字符串之间的编辑距离差不多,使用动态规划的方法,递推公式如下:dp[i,j]dp[i, j]dp[i,j]表示字符串x[:i]x[:i]x[:i]与字符串y[:j]y[:j]y[:j]之间的最长公共子序列dp[i,j]={0&原创 2021-08-24 14:37:49 · 2399 阅读 · 3 评论 -
python实现编辑距离以及回溯路径
编辑距离在自然语言处理中经常用到,例如,在英文拼写纠错中,对于一个错误单词,需要通过编辑距离找到对应的相似的候选词。介绍代码原创 2021-08-24 13:28:47 · 1578 阅读 · 5 评论 -
python解决单调栈问题
什么是单调栈?栈是先进后出的一种数据结构,而单调栈即无论何时栈中存放的数据是有序的,分为单调递增栈和单调递减栈单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大应用leetcode中用很多题目都可以用单调栈的方式来解决,用python来实现,用列表list来模拟栈。获取数组中每个元素的下一个更大元素例如,获取[1, 3, 4, 2]中每个元素的更大值,如果不存在返回-1,结果为[3, 4, -1, -1]class Solution:原创 2021-08-23 09:31:43 · 1947 阅读 · 0 评论 -
动态规划之最长回文串
最长回文子串leetcode 5若一个字符串是回文串,那么它的首尾元素应该相同,并且若该字符串的长度大于2,除去首尾元素后依然是回文串。由此可得到判断是否是回文串的递推公式,P(i,j)P(i, j)P(i,j) 代表子串SiS_{i}Si到SjS_{j}Sj是否是回文串:P(i,j)={ true, 如果子串 Si…Sj 是回文串 false, 其它情况 P(i, j)= \begin原创 2021-08-09 23:43:09 · 267 阅读 · 0 评论 -
并查集的理论及应用
并查集union & find是⼀种树型的数据结构,⽤于处理⼀些不交集(Disjoint Sets)的合并及查询问题。Find:确定元素属于哪⼀个⼦集确定两个元素是否属于同⼀⼦集Union: 将两个⼦集合并成同⼀个集合...原创 2021-08-09 09:59:19 · 53 阅读 · 0 评论 -
快慢指针的应用
快慢指针的在leetcode的问题中有很多应用,例如通过一次遍历找到链表的中间节点。 这里要介绍的是作为哨兵,应用于数组或者链表中删除特定元素,不另外开辟空间,即空间复杂度为O(1)删除有序数组中的重复项leetcode 26因为是有序数组,所以重复的元素都是在一起的。暴力处理,每次判断当前元素和后一个元素是否相同,不相同则删除,而删除需要移动后面的元素,时间复杂度为O(n^2)使用快慢指针,slow记录的是不同元素的索引。fast作为哨兵,一开始指向slow的下一个元素,如果遇到不同的元素则赋原创 2021-08-08 18:45:37 · 166 阅读 · 0 评论 -
二叉树的遍历
关于二叉树的算法问题,一般都以二叉树的遍历为基础,这里给出二叉树的多种遍历方式树结构:树结点的定义及其构建:class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None# 构建root = TreeNode(3)a = TreeNode(1)b = TreeNode(4)c = TreeNode(2)d = TreeNod原创 2021-07-26 20:24:48 · 96 阅读 · 0 评论