![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其他算法
洋芋洋芋洋芋
这个作者很懒,什么都没留下…
展开
-
KMP算法详解
KMP详解问题引入现在给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含返回包含位置的起始位置:string s1 = "bababababbabababababaccbbbbb";string s2 = "abacc";这个就是我们的字符串匹配问题那么我们如何来解决这个问题?常用暴力一个一个匹配是可行的,但是时间复杂度是O(m * n)这样的一个时间复杂度是非常高的,在针对较长字符串效率很低这也就是我们学习KMP算法的原因。KMP算法能够把时间复杂度降到O(m + n);原创 2021-11-28 12:28:46 · 151 阅读 · 0 评论 -
C/C++ __int128
用来处理 long long 处理不了的整数但是数据范围又在128位以内的#include <bits/stdc++.h>using namespace std;inline __int128 read(){ __int128 x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; c原创 2021-11-28 11:50:15 · 1559 阅读 · 0 评论 -
解题记录 LeetCode 单词拆分 II
单词拆分 II题目链接: https://leetcode-cn.com/problems/word-break-ii/比单词拆分要难一点, 本质来说也是一个记忆化搜索, 但是需要用到哈希表来加速题意: 把能拆分的单词间隔空格编程句子, 返回所有可能的句子说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。思路:见代码, 思路要清晰, 关键在于 map 的定义, 用下标对应下标后面的句子集来进行加速, 否则要T对于字符串 s,如果某个前缀是单词列表中的单词,则拆分出该原创 2021-07-04 17:05:32 · 85 阅读 · 0 评论 -
解题记录 LeetCode 单词拆分
单词拆分题目连接: https://leetcode-cn.com/problems/word-break/一道比较经典的动态规划的题目, 当然也可以用记忆化搜索来做, 本质是差不多的题意: 把 s 拆分成一个或多个在字典中出现的单词说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。思路:状态定义:我们把 dp[i] 来表示前 i 个字符串拆成单词是否是字典中单词之一状态计算:dp[j] = dp[i] && check(s[i ~ j - 1]原创 2021-07-04 14:55:51 · 52 阅读 · 0 评论 -
离散化
离散化离散化本质上可以看成是一种哈希,其保证数据在哈希以后仍然保持原来的全/偏序关系。通俗地讲就是当有些数据因为本身很大或者类型不支持,自身无法作为数组的下标来方便地处理,而影响最终结果的只有元素之间的相对大小关系时,我们可以将原来的数据按照从大到小编号来处理问题,即离散化。用来离散化的可以是大整数、浮点数、字符串等等举个例子,如果一个坐标轴很长(>1e10),给你1e4个坐标,询问某一个点,坐标比它小的点有多少。很容易就知道,对于1e4个点,我们不必把他们在坐标轴上的位置都表示出来,因为我原创 2021-05-10 23:12:02 · 143 阅读 · 0 评论 -
主元素问题
主元素问题曾经在啊哈算法看到的问题, 这里的解法有很多, 根据实际需要来就行常规做法:桶存, 排序 等等都可以最优解:由于主元素的出现的次数超过 n / 2,那么在不断的消掉两个不同的元素之后,最后一定剩下主元素。输入时判断与上一次保存的输入是否相同,如不同则删除两数, 可以用栈实现:while (n--) { scanf("%d", &a); q[top++] = a; top = (top > 1 && (q[top - 1] != q[top -原创 2021-05-10 21:16:58 · 109 阅读 · 0 评论