
其他
cmp 单调队列 差分数组 字典树
重you小垃
这个作者很懒,什么都没留下…
展开
-
leetcode2305. 公平分发饼干(中等,周赛,状压dp)
思路一:暴力dfs,时间复杂度为O(n^n),时间复杂度有些高。思路二:子集划分+子集个数有限制->状压dp 时间复杂度O(n * 3^n)是固定的状压dp相关知识:具体思路:dp[i][j]表示消耗的集合个数为i,选择的饼干为j所获得饼干最大总数的最小值。i的取值为1->k j的取值为1->(1......原创 2022-07-01 09:46:39 · 354 阅读 · 0 评论 -
leetcode2296. 设计一个文本编辑器(周赛,困难,对顶栈)
思路:针对在数组移动+数组中间任意插入->可以用对顶栈(即堆顶相对的两个栈,用string vector模拟stack,就能取当前位置左边或者右边某几个元素了)原创 2022-06-07 15:28:21 · 184 阅读 · 0 评论 -
leetcode307. 区域和检索 - 数组可修改(中等,树状数组)
思路:树状数组原创 2022-06-02 21:56:14 · 92 阅读 · 0 评论 -
leetcode718. 最长重复子数组(中等, 字符串hash)
思路一:dp O(n*m)dp[i][j]表示 nums1[0…i]与 nums2[0…j]的最长重复子数组转移方程:如果nums1[i] == nums2[j]:dp[i][j] = dp[i-1][j-1]+1否则:dp[i][j] = 0ans:dp数组中的最大值class Solution {public: int findLength(vector<int>& nums1, vector<int>& nums2) { ..原创 2022-05-28 10:45:59 · 242 阅读 · 0 评论 -
leetcode70.爬楼梯(简单,快速幂)
思路一:记忆化dfsclass Solution {public: unordered_map<int, int> ump; int dfs(int n) { if (n == 1) return 1; if (n == 2) return 2; if (ump.count(n)) return ump[n]; ump[n] = dfs(n - 2) + dfs(n - 1); return ..原创 2021-12-08 21:43:30 · 617 阅读 · 0 评论 -
算法笔记.序列左边比它小的元素个数(树状数组)
题目:给定N个正整数 (N<10^5 每个元素< 10^5,对序列中的每个元素,求出左边比它小的元素个数。分析: 求比它小的元素个数->区间和;数组大小可以开到10^5,所以不用离散化。具体做法: 每输入一个元素,update(x, 1);左边比他小的:getsum(x-1);#include <bits/stdc++.h>using namespace std;#define lowbit(x) (x & (-x))const int N = 1000原创 2021-07-12 10:21:46 · 1288 阅读 · 1 评论 -
leetcode1109.航班预定统计(中等,差分数组)
思路:区间和->线段树 树状数组,但是代码较长。新的解法:差分数组。差分数组的定义:c[0]=a[0] c[i]=a[i]-a[i-1] 则c数组是a数组的差分数组,c的前缀和就是a数组。a数组在区间[l,r]增加d: c[l]+=d c[r+1]-=dclass Solution {public: vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n...原创 2022-04-10 10:00:15 · 1084 阅读 · 0 评论 -
leetcode208.实现Trie(中等,前缀树)
前缀树的介绍:https://leetcode-cn.com/problems/implement-trie-prefix-tree/solution/trie-tree-de-shi-xian-gua-he-chu-xue-zhe-by-huwt/Trie,又称前缀树或字典树。主要用于:1:查找某个字符串是否存在该数据结构中2:查找是否存在某前缀的字符串包含三个单词 “sea”,“sells”,“she” 的 Trie 会长啥样呢?简化后:直接套模板:class Trie {原创 2022-01-02 12:49:46 · 232 阅读 · 0 评论 -
leetcode239.滑动窗口最大值(困难,单调队列)
自己一开始没思路。。。解法一:暴力具体: 外层循环遍历窗口的左位置,内层循环遍历窗口内的元素分析: 时间复杂度是O(nk),n是5次方级别,所以会超时。。。思路出发点: 找一种数据结构,维护窗口内的元素,窗口向右滑动时,从数据结构中删掉左边的元素,添加右边的元素。解法一:set注意: 数组中可能会存在重复元素,所以不能用set,改成multiset!!!class Solution {public: vector<int> maxSlidingWindow(vect...原创 2021-11-06 20:03:50 · 168 阅读 · 0 评论 -
leetcode 28.实现strStr()(kmp,字符串hash)
思路1:暴力,从左到右依次比对。思路2:kmp算法class Solution {public: int nxt[50005]; void get_nxt(const string &needle); int kmp(const string& haystack, const string& needle); int strStr(string haystack, string needle) { if (needle.siz..原创 2021-04-23 21:10:00 · 183 阅读 · 0 评论