数据结构刷题
算法
陈岂几真幸运
冲冲冲
展开
-
海量数据处理
①:位图bitsmap② ③:手机号是11位的否则就需要用到哈希分治、或外部排序了④:小顶堆。原创 2023-07-23 00:57:01 · 50 阅读 · 0 评论 -
BM100 设计LRU缓存结构
3. set(key, value):将记录(key, value)插入该结构,如果关键字 key 已经存在,则变更其数据值 value,如果不存在,则向缓存中插入该组 key-value ,如果key-value的数量超过capacity,弹出最久未使用的key-value。LRU缓存结构,是一种常见得缓存替换策略,通过保留最近使用得数据,淘汰长时间没被使用得数据,以提高缓存得命中率和性能。2. get(key):如果关键字 key 存在于缓存中,则返回key对应的value值,否则返回 -1。原创 2023-06-16 12:45:14 · 61 阅读 · 0 评论 -
BM95 分糖果问题
给了一个数组,里面是每个小孩的分数,要求相邻小孩中得分高的那一名得到的糖多一些(并不需要得分越高拿的糖越多,只比旁边分低的多一个就行)1. 新建一个数组大小为小孩数据量,初始化每个人分一颗糖;2. 依次从左到右遍历,右遍比左边得分高就将其糖数加一;3. 再从后向前遍历,左边比右遍高,就将左边加一。原创 2023-06-15 21:04:06 · 43 阅读 · 0 评论 -
BM86 大数加法
【代码】BM86 大数加法。原创 2023-06-12 10:26:32 · 31 阅读 · 0 评论 -
BM84 最长公共前缀
2.遍历第一个字符串的长度,从第一个字符串一个一个找后面是否和第一个字符串对应位置相同,不相同就将前面分割出来使用substr函数,因为这个函数是左闭右开的所以直接用;1.如果是空的那直接返回空的;原创 2023-06-05 11:04:48 · 45 阅读 · 0 评论 -
BM83 字符串变形
也可以直接使用s[i] - 'A' + 'a' 的方法 大学变小写;记录索引,依次遍历字符串,定义一个j 记录到空格的地方。s[i] - 'a' + 'A'小写变大写;原创 2023-06-05 10:45:38 · 58 阅读 · 0 评论 -
BM82 买卖股票的最好时机(三)
这里最多可以操作两次买入卖出。也可以只操作一次买入卖出。原创 2023-06-03 12:06:35 · 48 阅读 · 0 评论 -
BM81 买卖股票的最好时机(二)
这里允许多次买卖股票,但是需要买之前需要先卖出。原创 2023-06-03 12:05:18 · 41 阅读 · 0 评论 -
BM80 买卖股票的最好时机(一)
只可以买入卖出一次。原创 2023-06-03 11:59:29 · 30 阅读 · 0 评论 -
BM79 打家劫舍(二)
这里加了一个头尾相接的条件,偷了头部,尾部就不应该被偷了。分成两种情况分析,偷第一家和不偷第一家的然后比较。偷了尾部,头部就不可以被偷了。原创 2023-06-03 11:18:55 · 61 阅读 · 0 评论 -
BM78 打家劫舍(一)
沿路的一排房间,不能连续偷两家,比如ABS,偷了A就不能投B。原创 2023-06-03 09:58:52 · 44 阅读 · 0 评论 -
BM77 最长的括号子串
例2:对于字符串 ")()())" , 来说, 最长的格式正确的子串是 "()()" ,长度为 4。例1: 对于字符串 "(()" 来说,最长的格式正确的子串是 "()" ,长度为 2 .一个长度为n的字符串,仅包含字符‘(’ 和 ‘)’ ,计算正确格式的长度。原创 2023-06-01 00:49:16 · 47 阅读 · 0 评论 -
BM76 正则表达式
/若是前一位为.或者前一位可以与这个数字匹配dp[i][j] = dp[i - 1][j] || dp[i][j - 2];//不匹配 dp[i][j] = dp[i][j - 2];2.首先判断str为空得情况 ,只有当为“*”时才有可能匹配成功 利用出现0次得条件。1. dp[i][j]表示str前i个字符和pattern前j个字符是否匹配。2.模式中的字符'*'表示它前面的字符可以出现任意次(包含0次)1》当前字符不为*,用.去匹配或者字符直接相同。1.模式中的字符'.'表示任意一个字符。原创 2023-05-31 23:48:00 · 41 阅读 · 0 评论 -
BM75 编辑距离(一)
用dp[i][j]表示从两个字符串首部各自到str1[i]和str2[j]为止的子串需要的编辑距离,那很明显dp[str1.length][str2.length]就是我们要求的编辑距离。给定两个字符串 str1 和 str2 ,请你算出将 str1 转为 str2 的最少操作数。原创 2023-05-30 11:51:02 · 52 阅读 · 0 评论 -
BM74 数字字符串转化成IP地址
ip地址是由四段数字组成的数字序列,格式如 "x.x.x.x",其中 x 的范围应当是 [0,255]原创 2023-05-30 10:55:08 · 89 阅读 · 0 评论 -
BM73 最长回文子串
长度为n的一个字符串A(仅包含数字,大小写英文字母), 计算其中最长回文子串的长度。原创 2023-05-29 22:44:04 · 60 阅读 · 0 评论 -
BM72 连续子数组的最大和
长度为n的数组,数组中的一个或连续多个整数组成一个数组,子数组最小长度为1。数组来记录以每个位置为结尾的最大子数组和;从数组的第二个元素开始遍历,对于每个位置。将上述两个值中较大的一个赋值给。设置为数组的第一个元素。结尾的最大子数组和。为当前最大子数组和。原创 2023-05-29 22:08:33 · 39 阅读 · 0 评论 -
BM71 最长上升子序列(一)
为结尾的上升子序列长度加上当前元素后能够得到更长的上升子序列。数组来记录以每个元素为结尾的最长上升子序列的长度;给了一个数据,找这个数组的最大上升子序列长度;[1,5,3,7,3] 数组。,即当前元素比之前的元素大,且。原创 2023-05-29 20:14:40 · 29 阅读 · 0 评论 -
BM70 兑换零钱(一)
一个数组里面放了不同值的零钱,给了一个数值叫我们去拿零钱换,要求零钱使用张数量最少。原创 2023-05-28 22:03:53 · 59 阅读 · 0 评论 -
BM69 把数字翻译成字符串
之间 和在 21 - 27之间有两种情况所以是dp[i] = dp[i -1] + dp[i-2]在1 - 9 之间只有一种情况所以是dp[i] = dp[i -1]如果 i = “0” 那他前一位必须是1或者2 否则错误。如果 num = ”10“ ”20“ 只有一种情况;根据题目描述只有1-26的数字有对应的字母表示。所以我们首先要对一些错误情况进行处理,1. 如果num = ”0“ 错误;结尾的解码方式的数量。原创 2023-05-28 21:31:13 · 40 阅读 · 0 评论 -
BM68 矩阵的最小路径和
【代码】BM68 矩阵的最小路径和。原创 2023-05-28 08:50:52 · 28 阅读 · 0 评论 -
BM67 不同路径的数目(一)
【代码】BM67 不同路径的数目(一)原创 2023-05-27 11:06:42 · 29 阅读 · 0 评论 -
BM66 最长公共子串
遍历从1开始,dp数组的第0行和第0列都是用来存放空字符串的情况的,即dp[0][j]和dp[i][0]都表示其中一个字符串为空的情况,此时LCS长度为0。因此在遍历时,需要从1开始遍历,跳过这个特殊情况。因为他要的是字符串嘛,需要更新情况就找最大长度字符串。给了两个字符串,要找到两个字符串的最长公共子串。原创 2023-05-27 10:34:05 · 66 阅读 · 0 评论 -
BM65 最长公共子序列(二)
dp[i][j]指的是 s1以i结尾,s2以j结尾的字符串 的最长公共子序列长度。b[i][j] 数组相加的方向。原创 2023-05-27 09:34:43 · 39 阅读 · 0 评论 -
BM64 最小花费爬楼梯
爬到第n层所需要的费用可能是 第n-1层向上爬一层 也可能是第n-2层向上爬两层。构建dp[i]数组记录从楼梯第i个台阶向上爬需要支付的费用,下标从0开始。原创 2023-05-25 21:36:52 · 33 阅读 · 0 评论 -
BM61 矩阵最长递增路径
定义四个方向int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};遍历比较,条件是matrix[nexti][nextj] > matrix[i][j]) 计数。n*m矩阵 ,所有数均为非负数,需要在矩阵中找到一条最长路径,使这条路上元素都是递增;上下左右方向移动,不重复走每个各自走一次。原创 2023-05-25 00:55:57 · 36 阅读 · 0 评论 -
BM60 括号生成
1. 递归recursion(0,0,temp,res,n);2. 终止条件 左右括号使用数量达到n 全用玩了。生成所有的由n对括号组成的合法组合。//使用右括号个数必须少于左括号。原创 2023-05-25 00:40:01 · 47 阅读 · 0 评论 -
BM59 N皇后问题
1. 首先重建棋盘:vector<std::string> chessboard(n, std::string(n,'.'));2. 回溯:一行一行的找到合适的位置 放置皇后Q 终止条件是行数到达 此时计数加一。一个N*N的棋盘,要摆放N个皇后 然后这个皇后不能同行、同列、同斜线。写成N*N 每个元素都是一个点;原创 2023-05-25 00:18:42 · 47 阅读 · 0 评论 -
BM58 字符串的排列
这是一道全排列问题,就是说字符串的每一位都要被用到,但是字符串可能存在重复问题,所以需要一步去重操作和BM56相似。原创 2023-05-24 23:54:42 · 51 阅读 · 0 评论 -
BM57 岛屿数量
时间复杂度:O(nm),其中 n 和 m 分别为二维矩阵的行数和列数。最坏情况下,需要遍历整个矩阵才能确定岛屿数量。空间复杂度:O(nm),在最坏情况下,整个矩阵均为岛屿,递归深度达到最大,此时需要 O(nm) 的栈空间。dfs遍历,先依次遍历,遍历到该处为1,进入bfs递归将该处的相连的所有为1消灭掉。原创 2023-05-24 23:29:45 · 37 阅读 · 0 评论 -
BM55 没有重复项的全排列
【代码】BM55 没有重复项的全排列。原创 2023-05-24 22:16:53 · 49 阅读 · 0 评论 -
BM54 三数之和
【代码】BM54 三数之和。原创 2023-05-23 14:14:46 · 25 阅读 · 0 评论 -
BM53 缺失的第一个正整数
给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数。原创 2023-05-16 12:53:23 · 28 阅读 · 0 评论 -
BM52 数组中只出现一次的两个数字
1. 可以用哈希表来做。原创 2023-05-16 12:43:38 · 24 阅读 · 0 评论 -
BM51 数组中出现次数超过一半的数字
一个记录下标 一个记录出现次数。原创 2023-05-16 11:56:10 · 24 阅读 · 0 评论 -
BM50 两数之和
哈希表:unordered_map <int,int> hashmap;定义两个值,一个是下标一个放值。时间复杂度为O(N);该方法需要构建哈希表,因此空间复杂度为O(N)这个题要返回目标值的下标。原创 2023-05-16 11:54:25 · 31 阅读 · 0 评论 -
BM49 表达式求值
isdigit() 函数判断字符串是否是数字。计算器,支持加减乘三种运算和括号。原创 2023-05-16 11:05:20 · 39 阅读 · 0 评论 -
BM48 数据流中的中位数
reinterpret_cast:用于进行底层的类型转换,即将一个指针转换成一个整数值或者将一个整数值转换成一个指针。static_cast:用于基本数据类型之间的转换,如将整数转换成浮点数、浮点数转换成整数、将指针或引用转换成不同的指针或引用类型等。只能用于多态类型,即至少有一个虚函数的类。lower_bound返回一个迭代器,指向在[first,last)范围内的第一个大于或等于val的元素。upper_bound返回一个迭代器,指向在[first,last)范围内的第一个大于val的元素。原创 2023-05-16 09:49:24 · 55 阅读 · 0 评论 -
BM47 寻找第K大
找一个基准值,依次将大于它的放右遍,小于的放左边。时间复杂度 O(nlogn),空间复杂度 (1)O(1)原创 2023-05-16 00:50:42 · 26 阅读 · 0 评论 -
BM46 最小的K个数
priority_queue pq表示一个存储整形数据的优先队列,使用vector作为底层容器进行存储;这里用到一个优先级队列priority_queue:默认大根堆 从大到小排列 顶端最大。也可以通过修改比较函数改成小根堆。原创 2023-05-16 00:27:05 · 35 阅读 · 0 评论