数据结构与算法
小屋*
这个作者很懒,什么都没留下…
展开
-
数据结构与算法——二分查找与二叉查找树汇总整理
目录预备知识:二分查找基础知识例1:插入位置(easy) (二分查找)例2:区间查找(medium)(二分查找)例3:旋转数组查找(medium)(二分查找)预备知识:二叉查找(排序)树基础知识例4:逆序数(hard)(二叉查找树应用)预备知识:二分查找基础知识在列表A中查找B列表中元素是否存在,存在为1否则为0,结果存在result列表中。递归实现:#include <stdio.h>#include <vector>bool binary_search(std::v原创 2022-03-09 13:45:17 · 852 阅读 · 0 评论 -
数据结构与算法——二叉树与图汇总整理
目录预备知识:二叉树基础知识例1:路径之和2(medium)(二叉树深搜)例2:最近的公共祖先(medium)(二叉树性质)例3:二叉树转链表(medium)(二叉树与链表)预备知识:二叉树层次遍历例4:侧面观察二叉树(medium)(二叉树宽搜)预备知识:图的基础知识例5:课程安排(有向图判断环)(medium)预备知识:二叉树基础知识树是n(n>=0)个节点的有限集,且这些节点满足如下关系:(1)有且仅有一个节点没有父结点,该节点称为树的根。(2)除根外,其余的每个节点都有且仅有一个父结原创 2022-02-28 23:01:31 · 558 阅读 · 0 评论 -
数据结构与算法——递归、回溯与分治汇总整理
目录预备知识:递归函数与回溯算法例1-a:求子集(medium)(回溯法、位运算法)例1-b:求子集2(medium)(回溯法)例1-c:组合数之和2(medium)(回溯法、剪枝)例2:生成括号(medium)(递归设计)例3:N皇后(hard)(回溯法)预备知识:分治算法与归并排序例4:逆序数(hard)(分治法、归并排序应用)预备知识:递归函数与回溯算法例1-a:求子集(medium)(回溯法、位运算法)class Solution {public: vector<vect原创 2022-02-26 17:32:13 · 1742 阅读 · 3 评论 -
数据结构与算法——贪心算法汇总整理
目录例1:分糖果(easy)(排序、贪心)例2:摇摆序列(medium)(贪心)例3:移除K个数字(medium)(栈、贪心)例4-a:跳跃游戏(medium)(贪心)例4-b:跳跃游戏2(hard)(贪心)例5:射击气球(medium)(排序、贪心)例6:最优加油方法(hard)(堆、贪心)例1:分糖果(easy)(排序、贪心)class Solution {public: int findContentChildren(vector<int>& g, vector&原创 2022-02-25 17:43:06 · 8464 阅读 · 4 评论 -
数据结构与算法——链表汇总整理
目录例1-a:链表逆序(easy)例1-b:链表逆序2(medium)例2:链表求交点(easy)例3:链表求环(medium)例4:链表划分(medium)例5:复杂链表的复制(hard)例6-a:2个排序链表归并(easy)例6-b:K个排序链表归并(hard)例1-a:链表逆序(easy)class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* new_head = NULL;原创 2022-02-23 21:09:52 · 599 阅读 · 0 评论 -
数据结构与算法——爬楼梯
每次可以爬1,2,3阶楼梯。但是如果上一步是2or3阶那么下一阶必须为1阶,计算爬n阶楼梯的所有方法。可以看作是动态爬楼过程。划分三种状态0.开始爬1.上一步为1阶23.是一步非1阶。原创 2022-07-26 18:25:54 · 543 阅读 · 2 评论 -
2022美团实习生笔试记录
class Solution(): ''' ————————————第一题—————————————— 输入:有重复值的nums 求:数组中某个num邻居数量的最大值 (k的邻居数为k-1,k,k+1) 以[6,2,2,1,5,3,3]为例, 2的邻居数为5,分别是1,2,2,3,3 ''' def meituan1(self,nums): dict_a={} res=0 for num in num原创 2022-05-14 22:22:44 · 419 阅读 · 1 评论 -
力扣——835. 图像重叠
题目描述思路:1.图像填充 填充后的图像,即为img1可以平移的所有情况2.卷积class Solution(object): def largestOverlap(self, img1, img2): """ :type img1: List[List[int]] :type img2: List[List[int]] :rtype: int """ n=len(img1)原创 2022-05-02 23:17:44 · 527 阅读 · 0 评论 -
力扣—— 287.寻找重复数
官网指导二分法class Solution: def findDuplicate(self, nums): n=len(nums) left=1 right=n-1 while left<right: mid=left+(right-left)//2 cnt=0 for num in nums: if num<=mi原创 2022-05-01 15:29:36 · 381 阅读 · 0 评论 -
力扣—— 21、23合并链表(两个、K个)
目录C++class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode temp_head(0); ListNode *pre=&temp_head; while(l1 && l2){ if(l1->val<l2->val){ pre-&原创 2022-04-30 22:30:27 · 135 阅读 · 0 评论 -
数据结构与算法——广度搜索BFS
目录模板542.01矩阵529.扫雷游戏2146.价格范围内最高排名的k样物品模板542.01矩阵class Solution: def updateMatrix(self, matrix) : m, n = len(matrix), len(matrix[0]) dp = [[0] * n for _ in range(m)] zeroes_pos = [(i, j) for i in range(m) for j in range(n)原创 2022-04-24 19:53:34 · 2439 阅读 · 0 评论 -
数据结构与算法——搜索
目录例1:岛屿数量(medium)(深搜、宽搜)例2-a:词语阶梯(medium)(宽搜、图、哈希表)例2-b:词语阶梯2(hard)(记录路径的宽搜、图、哈希表)例3:火柴棍摆正方形(medium)(回溯深搜、位运算)例4:收集雨水2(hard)(带优先级的宽度优先搜索、堆)例1:岛屿数量(medium)(深搜、宽搜)例2-a:词语阶梯(medium)(宽搜、图、哈希表)例2-b:词语阶梯2(hard)(记录路径的宽搜、图、哈希表)例3:火柴棍摆正方形(medium)(回溯深搜、位运算)例4:原创 2022-03-09 21:57:37 · 602 阅读 · 0 评论 -
力扣—— 79/212. 单词搜索
目录79 单词搜索212 单词搜索II79 单词搜索class Solution(object): #深度搜索 def exist(self, board, word): self.flag=0 self.len=len(word) m, n =len(board),len(board[0]) # 找起始位 for i in range(m): for j in range(n):原创 2022-04-09 22:25:18 · 505 阅读 · 0 评论 -
力扣—— 36. 有效的数独/37. 解数独
目录有效的数独解数独有效的数独class Solution10(object): def isValidSudoku(self, board): """ :type board: List[List[str]] :rtype: bool """ rows={} columns= {} blocks= {} for i in range(9):原创 2022-04-09 12:15:39 · 303 阅读 · 0 评论 -
数据结构与算法——动态规划
目录例1:爬楼梯(easy)例2:打家劫舍(easy)例3:最大字段和(easy)例4:找零钱(medium)例5:三角形(medium)例6:最长上升子序列(medium,hard)例7:最小路径和(medium)例8:地牢游戏(hard)例1:爬楼梯(easy)class Solution {public: int climbStairs(int n) { vector<int>dp(n + 3, 0); dp[1] = 1; dp[2] = 2; for (in原创 2022-03-10 16:16:39 · 5784 阅读 · 1 评论 -
数据结构与算法——哈希表与字符串
目录预备知识:哈希表基础知识例1:最长回文串(easy)(字符哈希)例2:词语模式(easy)(字串符哈希)例3:同字符词语分组(medium)(数组哈希)例4:无重复字符的最长子串(medium)(字符哈希)例5:重复的DNA序列(medium)(字串符哈希)例6:最小窗口子串(hard)(哈希维护窗口)预备知识:哈希表基础知识例1:最长回文串(easy)(字符哈希)class Solution {public: int longestPalindrome(std::string s)原创 2022-03-09 20:05:17 · 380 阅读 · 0 评论 -
力扣——315. 计算右侧小于当前元素的个数
目录问题描述问题分析问题描述问题分析本题采用分治思想进行处理,单独处理较长数组算法复杂度过大,先拆分为短对象进行处理,最后将结果进行合并。针对拆分出来的较短数组的处理:class Solution {public: vector<int> countSmaller(vector<int>& nums) { vector<pair<int, int>>vec;//将数组值与index关联 vecto原创 2022-02-26 16:13:34 · 321 阅读 · 0 评论 -
力扣—— 51. N 皇后
目录题目描述问题分析题目描述问题分析何为不能攻击?攻击范围:同行、同列、同对角线。在除此以外的位置安全。所以需要对棋盘进行数字化表示,我们将棋盘看作是一个矩阵,安全位置用0占位,受攻击位置为1,且攻击位置在皇后所在位置的临近8个方向。在此方向上遍历棋盘将所有攻击位置至1:放置皇后的功能函数:class Solution {public: vector<vector<string>> solveNQueens(int n) { vecto原创 2022-02-26 15:23:37 · 537 阅读 · 0 评论 -
数据结构与算法——栈、队列、堆汇总整理
目录例1:使用队列实现栈(easy 栈、队列)例2:使用栈实现队列(easy 栈、队列)例3:包含min函数的栈(easy 栈)例4:合法的出栈序列(medium 栈、队列)例5:简单的计算器(hard 栈)例6:数组中第K大的数(easy 堆)例7:寻找中位数(hard 堆)例1:使用队列实现栈(easy 栈、队列)class MyStack {public: MyStack() { } void push(int x) { std::queue<i原创 2022-02-23 17:30:19 · 1317 阅读 · 0 评论 -
力扣—— 295. 数据流的中位数(困难)
目录题目描述c++代码题目描述c++代码在这里插入代码片原创 2022-02-23 16:39:43 · 594 阅读 · 0 评论 -
力扣—— 224. 基本计算器(困难)
目录题目描述题目分析c++代码题目描述给你一个字符串表达式s,请你实现一个基本的计算器来返回它的值。注意不允许使用任何将字符串作为数学表达式计算的内置函数,比如:eval()。示例一:输入:s=“1+1”输出:2示例二:输入:s=" 2-1 + 2"输出:3示例三:输入:s="(1+(4+5+2)-3)+(6+8)"输出:23题目分析涉及到优先级问题,准备用栈做。需要解决 :什么时候可以计算?什么时候需要等待?即需要我们设置一个标志位来记录计算的状态(compute_flag原创 2022-02-23 16:03:40 · 418 阅读 · 0 评论 -
python提高——进程、线程、协程对比及代码实现
这里写自定义目录标题原创 2021-11-01 19:56:25 · 571 阅读 · 0 评论 -
二叉树——基本知识+python实现
目录树树的概念树的术语树的种类二叉树基本概念性质遍历深度优先遍历广度优先遍历(层次遍历)实现树树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可原创 2021-10-24 22:24:37 · 163 阅读 · 0 评论 -
链表——单链表、单向循环链表、双向链表
目录1 单链表节点实现单链表操作单链表实现测试链表与顺序表对比2 单向循环链表操作实现测试3 双向链表操作实现测试1 单链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用来存放具体的数据。链接域next用来存放下一个节点的位置(python中的标识)变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。节点实现class Sin原创 2021-10-24 15:30:38 · 1184 阅读 · 0 评论 -
力扣——LCP 37. 最小矩形面积(困难)
刚看到本题时感觉难度不是很大,却出现在困难组里面。后面万万没想到提交测试的时候输入了将近20000条直线进行判断,如果直接上来就做的话,那肯定会:接下来看题目:题目python代码刚开始我的代码是直接做的,结果超时。def minRecSize(lines): """ :type lines: List[List[int]] :rtype: float """ x_list=[] y_list=[] for i in range(len(原创 2021-07-15 18:50:13 · 258 阅读 · 0 评论 -
力扣——204. 计数质数
题目python代码1.直接法import timeitdef countPrimes(n): '''按照质数的定义,用常规的方法来取质数 ''' primesList = [] for i in range(2, n+1): # print(i) flag = True for divNum in range(2, i): # 从2到i-1,一个一个的除,如果有余数为0的状况,可以确定不是质数,退出循环原创 2021-07-12 15:49:35 · 260 阅读 · 0 评论 -
力扣——206.反转链表
题目python代码方法一:利用新列表,创建新的链表# Definition for singly-linked list.# class ListNode(object):# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution(object): def reverseList(self, head): ""原创 2021-07-12 11:39:44 · 162 阅读 · 0 评论 -
力扣—剑指 Offer 45. 把数组排成最小的数
题目解决方法参看官方解决思路,就是将数列中的元素两两拼接。如’2’+‘3’=‘23’<‘3’+‘2’='32’则2在3的左边。由于该题不用考虑组合后第一位是零的情况,所以这样将所有的元素比较排序后直接拼接为str即可。官方给出的解决代码class Solution(object): def minNumber(self, nums): """ :type nums: List[int] :rtype: str """原创 2021-06-14 11:57:53 · 164 阅读 · 0 评论 -
力扣--19删除链表中的倒数第n个节点
题目python代码正序删除将倒数第n个转换成正数的处理。然后分为头、尾、中三种情况处理:def removeNthFromEnd( head, n): pointer = head length = 0 while pointer: pointer = pointer.next length += 1 if length == 1: return None pointer = head if n &g原创 2021-06-03 15:46:39 · 103 阅读 · 0 评论 -
力扣--8字符串转换整数 (atoi)
题目python 代码此题的限制条件比较多def myAtoi(s): s = s.lstrip() #去开头空格 if len(s) < 1: return 0 minusFlag = False #假设最终数字非负 if s[0] in ['+', '-']: if s[0] == '+': pass else: minusFlag = True原创 2021-05-31 14:15:08 · 145 阅读 · 0 评论 -
力扣--125验证回文串/680验证回文字符串II
125验证回文串python代码常规def isPalindrome(s): if len(s) < 2: return True sList = [] s = s.lower() print(s) for word in s: if word.isalnum(): sList.append(word) n=len(sList)//2 if sList[:n]==sList[::-1原创 2021-05-31 14:00:35 · 106 阅读 · 0 评论 -
力扣--242有效的字母异位词
题目python 代码排序比较def isAnagram(s, t): # 排序比较 if len(s) != len(t): return False sList = list(s) sList.sort() tList = list(t) tList.sort() for i in range(len(s)): if sList[i] == tList[i]: continue原创 2021-05-31 12:43:04 · 159 阅读 · 0 评论 -
力扣--36有效的数独
题目python代码将所给的二位数组按照行、列、块,分别存储到对应的列表中,只需要看该列表中的每个元素的长度是否等于去重以后的长度即可。def isValidSudoku(self,board): rows=[[]for i in range(9)] columns=[[]for i in range(9)] blocks=[[]for i in range(9)] for i in range(9): for j in range(9):原创 2021-05-31 09:38:23 · 115 阅读 · 0 评论 -
力扣--48旋转图像(中等)
题目python 代码def rotate(self, matrix): for i in range(len(matrix)): for j in range(i + 1, len(matrix)): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] for i in range(len(matrix)): matrix[i].reverse() return原创 2021-05-27 18:12:57 · 79 阅读 · 0 评论 -
力扣--349两个数组的交集I-II
题目Ipython代码def intersection(self, nums1, nums2): nums=[] for i in nums1: if i in nums2: if i not in nums: nums.append(i) return numsdef intersection(self, nums1, nums2): nums=list(set(nums1)&set(原创 2021-05-27 17:49:52 · 115 阅读 · 1 评论 -
力扣--260只出现一次的数字I-III
题目IPython 代码1 利用字典计数def singleNumber(self,nums): dict={} for i in nums: if i not in dict: dict[i]=1 else: dict[i]+=1 for key, value in dict.items(): if value==1: return key ret原创 2021-05-27 16:06:57 · 6693 阅读 · 2 评论 -
力扣--220存在重复I-III
题目Ipython代码1 暴力判断def containsDuplicate(nums): for i in range(len(nums) - 1): if nums[i] in nums[i+1:]: return True return False2 排序比较def containsDuplicate(nums): nums.sort() for i in range(len(nums) - 1):原创 2021-05-27 15:20:46 · 131 阅读 · 3 评论 -
力扣--189旋转数组(中等)
题目python代码1 颠倒列表法def rotate(nums, k): if len(nums) < 2: return nums.reverse() k = k % len(nums) #避免k大于nums的长度 while k > 0: temp = nums.pop(0) nums.append(temp) k -= 1 nums.reverse() return原创 2021-05-27 14:14:54 · 134 阅读 · 0 评论 -
力扣--122. 买卖股票的最佳时机 II
题目python代码def maxProfit(prices): maxPro = 0 i = 1 while i < len(prices): profit = prices[i] - prices[i-1] if profit > 0: maxPro += profit i += 1 return maxPro原创 2021-05-27 13:23:33 · 121 阅读 · 0 评论 -
力扣26--删除有序数组中的重复项
题目python代码def removeDuplicates(nums): n = len(set(nums)) i = 0 while i < n: if nums[i] == nums[i+1]: temp = nums[i+1] nums[i+1: len(nums) -1] = nums[i+2:] nums[-1] = temp continue原创 2021-05-27 13:11:57 · 92 阅读 · 0 评论