摘要:
本题让我们求不相交路径数目 方法1:递归/回溯 dfs(x, y, left) 表示从点x, y出发,还剩下left个可行走点的路径数目。 每行走到一个新的点就将该点设置为-1, 避免重复搜索。 当走到终点时,如果left == 0 则答案 + 1 class Solution { int dfs( 阅读全文
摘要:
启发式搜索 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] = { 阅读全文
摘要:
贪心:这种最大化类似于田忌赛马。 每次取出nums1中最小的,和nums2进行比较,如果打得过,就打;打不过就用当前最小的和nums2中最大的换掉 c ++ class Solution { public: vector<int> advantageCount(vector<int>& nums1, 阅读全文
摘要:
有边数限制的最短路 1、动态规划 f[i][j]表示恰好通过i次,从起点到大j这个点的最短路径。 class Solution { private: static constexpr int INF = 10000 * 101 + 1; public: int findCheapestPrice(i 阅读全文
摘要:
遇到环形问题一般有两种考虑方法: 1.破环成链 2.分为数组中间部分和数组两边部分分别考虑 本题采用第二种考虑方法,将原数组分为中间部分和两边部分分别考虑。中间部分即为子数组最大和,两边部分计总和减去中间部分最小和。 class Solution { public: int maxSubarrayS 阅读全文
摘要:
方法一:二分加枚举 通过二分快速查找小于某个难度值的最大价值。 class Solution { public: int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) { 阅读全文
摘要:
给我们一些排列,问我们在这些排列中,哪些元素的相对位置没有发生变化。 1.利用哈希 我们对每个数据对(i, j)进行哈希处理 v = i * 100 + j; 然后对剩下的排列进行枚举,看看有没有 j * 100 + i == v的,如果有,就说明所有排列中即出现了(i, j) 也出现了(j, i) 阅读全文
摘要:
h指数问题,当看到题目要求最大,最小的字眼是,可以想到二分,dp,枚举。 本题采用二分答案,对h指数进行二分。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; 阅读全文
摘要:
大模拟,本题我们可以唯一确定每头牛的相对年龄。 若无法确定牛的相对年龄,可以用图论进行遍历。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<unordered_map> using 阅读全文
摘要:
利用计数的思想,把每个字母分配到26个桶中,下标从小到大排序,利用upper_bound即可判断 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int ma 阅读全文