07 2023 档案

摘要:启发式搜索 class Solution { struct Node { string str; int x, y; int val; }; int n = 2, m = 3; string e = "123450"; int dx[4] = {-1, 0, 1, 0}; int dy[4] = { 阅读全文
posted @ 2023-07-21 11:26 深渊之巅 阅读(19) 评论(0) 推荐(0) 编辑
摘要:贪心:这种最大化类似于田忌赛马。 每次取出nums1中最小的,和nums2进行比较,如果打得过,就打;打不过就用当前最小的和nums2中最大的换掉 c ++ class Solution { public: vector<int> advantageCount(vector<int>& nums1, 阅读全文
posted @ 2023-07-15 21:37 深渊之巅 阅读(17) 评论(0) 推荐(0) 编辑
摘要:有边数限制的最短路 1、动态规划 f[i][j]表示恰好通过i次,从起点到大j这个点的最短路径。 class Solution { private: static constexpr int INF = 10000 * 101 + 1; public: int findCheapestPrice(i 阅读全文
posted @ 2023-07-13 10:21 深渊之巅 阅读(15) 评论(0) 推荐(0) 编辑
摘要:遇到环形问题一般有两种考虑方法: 1.破环成链 2.分为数组中间部分和数组两边部分分别考虑 本题采用第二种考虑方法,将原数组分为中间部分和两边部分分别考虑。中间部分即为子数组最大和,两边部分计总和减去中间部分最小和。 class Solution { public: int maxSubarrayS 阅读全文
posted @ 2023-07-12 11:38 深渊之巅 阅读(24) 评论(0) 推荐(0) 编辑
摘要:方法一:二分加枚举 通过二分快速查找小于某个难度值的最大价值。 class Solution { public: int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) { 阅读全文
posted @ 2023-07-12 10:26 深渊之巅 阅读(35) 评论(0) 推荐(0) 编辑
摘要:给我们一些排列,问我们在这些排列中,哪些元素的相对位置没有发生变化。 1.利用哈希 我们对每个数据对(i, j)进行哈希处理 v = i * 100 + j; 然后对剩下的排列进行枚举,看看有没有 j * 100 + i == v的,如果有,就说明所有排列中即出现了(i, j) 也出现了(j, i) 阅读全文
posted @ 2023-07-11 11:44 深渊之巅 阅读(10) 评论(0) 推荐(0) 编辑
摘要:h指数问题,当看到题目要求最大,最小的字眼是,可以想到二分,dp,枚举。 本题采用二分答案,对h指数进行二分。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; 阅读全文
posted @ 2023-07-11 11:22 深渊之巅 阅读(14) 评论(0) 推荐(0) 编辑
摘要:大模拟,本题我们可以唯一确定每头牛的相对年龄。 若无法确定牛的相对年龄,可以用图论进行遍历。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<unordered_map> using 阅读全文
posted @ 2023-07-11 11:20 深渊之巅 阅读(5) 评论(0) 推荐(0) 编辑
摘要:利用计数的思想,把每个字母分配到26个桶中,下标从小到大排序,利用upper_bound即可判断 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int ma 阅读全文
posted @ 2023-07-11 11:18 深渊之巅 阅读(4) 评论(0) 推荐(0) 编辑
摘要:简单模拟,最小的两个数字是a, b, 最大的数字时a + b + c #include<iostream> #include<cstdio> #include<algorithm> #include<set> using namespace std; int main() { multiset<in 阅读全文
posted @ 2023-07-11 11:15 深渊之巅 阅读(8) 评论(0) 推荐(0) 编辑
摘要:思路:动态规划 首先计算原数组的条件数组,及所有的元素都%2 f[i]表示从零到i中选,且以第i项为结尾的最长奇偶子数组。 class Solution { public: int longestAlternatingSubarray(vector<int>& nums, int threshold 阅读全文
posted @ 2023-07-10 22:53 深渊之巅 阅读(5) 评论(0) 推荐(0) 编辑
摘要:找规律的小题目 c ++ class Solution { public: int theMaximumAchievableX(int num, int t) { return num + t * 2; } }; 思路,动态规划。 f[i]表示,所有从0 - i - 1中跳到点 i 的方式的执行操作 阅读全文
posted @ 2023-07-09 15:06 深渊之巅 阅读(11) 评论(0) 推荐(0) 编辑
摘要:利用差分和动态规划进行求解。首先求出差分数组d[i],f[i]表示从0-i - 1中选,且包含d[i]所有交替子数组的最大长度。 条件中有s1 = s0 + 1 所以如果d[i] == 1 将 f[i]初始化为1 d[i - 1] == 1 && d[i] == -1 或者 d[i - 1] == 阅读全文
posted @ 2023-07-09 09:53 深渊之巅 阅读(7) 评论(0) 推荐(0) 编辑
摘要:方法1:利用桶的思想同时匹配所有words中的子串 (走路写法) 把所有首字母相同的子串放入到一个桶中,然后遍历s,对于首字母为s[i]的单词,若其大小为1则res ++, 否则删掉s[i],并根据s[i + 1]放入新的桶中。 c ++ class Solution { public: int n 阅读全文
posted @ 2023-07-08 16:32 深渊之巅 阅读(85) 评论(0) 推荐(0) 编辑
摘要:利用动态规划的思想,把每个格子上下左右连续的1的个数算出来,再从头到尾遍历一遍即可获得答案。 c ++ class Solution { public: int orderOfLargestPlusSign(int n, vector<vector<int>>& mines) { vector<ve 阅读全文
posted @ 2023-07-08 09:38 深渊之巅 阅读(10) 评论(0) 推荐(0) 编辑
摘要:我们根据position进行排序,然后倒序遍历。若后一辆车的时间比前一个少,前一辆车永远也追不上后一个,res ++ ;否则,前一辆车的时间等于后一个。 class Solution { struct Node { int p, s; double ti; bool operator < (cons 阅读全文
posted @ 2023-07-07 15:22 深渊之巅 阅读(5) 评论(0) 推荐(0) 编辑
摘要:首推桶思想,计数排序算法。 桶的本质实际上是一种分类,将全集分为子集,装入各个桶内。 我们将桶的分类标准按照年龄来分,cnt[i]表示年龄为i的人数 年龄为i的人可以向 (i - 0.5 * i + 7]~ i)的人发送好友请求,所以res += cnt[i - 0.8 * i + 7] + ... 阅读全文
posted @ 2023-07-07 10:01 深渊之巅 阅读(12) 评论(0) 推荐(0) 编辑
摘要:深度优先遍历判断二分图 c ++ class Solution { const static int N = 110, M = N * N; int h[N], e[M], ne[M], idx; int st[N]; void add(int a, int b) { e[idx] = b, ne[ 阅读全文
posted @ 2023-07-06 17:24 深渊之巅 阅读(7) 评论(0) 推荐(0) 编辑
摘要:首先c一手暴力法:利用树状数组,线段树,归并排序法查找逆序对,即全局倒置;在求出局部倒置,时间复杂度为nlogn 这里为了好写,采用树状数组方法进行逆序对求解 注:树状数组中下标不能有0,要对原数组进行+1修正 c ++ class Solution { int n; int tr[1000010] 阅读全文
posted @ 2023-07-04 23:35 深渊之巅 阅读(5) 评论(0) 推荐(0) 编辑
摘要:本题,我们可以先统计出words2中所有单词中每个字母出现的最大频次;再和words1中的每个单词依次进行比较。 python class Solution: def wordSubsets(self, words1: List[str], words2: List[str]) -> List[st 阅读全文
posted @ 2023-07-04 22:12 深渊之巅 阅读(1) 评论(0) 推荐(0) 编辑
摘要:题目性质:分块后每个块中的最大值单调递增,可以利用单调栈求解。 我们将每个块中的最大值放入单调栈中, 最终的结果为单调栈的大小。 c ++ class Solution { const static int N = 15; public: int maxChunksToSorted(vector<i 阅读全文
posted @ 2023-07-04 09:59 深渊之巅 阅读(4) 评论(0) 推荐(0) 编辑
摘要:设字符串s长度为len s可以重构为相邻字符串不同时 有字符串中出现次数最多的字符 < (len + 1) >> 1 当满足上述条件时候,我们就能对其进行重构 重构法:先放置偶数位置,再放置奇数位置 c ++ class Solution { public: string reorganizeStr 阅读全文
posted @ 2023-07-03 08:55 深渊之巅 阅读(29) 评论(0) 推荐(0) 编辑
摘要:本题中,可以发现性质:若卡片正反面相同,则一定不会作为答案; 只要其不在正反面相同的卡片集合中就可以作为答案, 选答案最小的即可。 c ++ class Solution { public: int flipgame(vector<int>& fronts, vector<int>& backs) 阅读全文
posted @ 2023-07-02 19:50 深渊之巅 阅读(20) 评论(0) 推荐(0) 编辑