- 博客(342)
- 资源 (1)
- 收藏
- 关注
原创 算法竞赛当中的思考方法——方法论篇。
几乎任何领域的任何问题的解决方案,都可以看作是“某个结构上的朴素方法的优化“。计算机只能处理规模有限的问题,在给定规模且不考虑效率的情况下,问题一定存在朴素解法。具体手段有直接模拟 / 利用bit枚举 / 各种搜索算法等。具体方法:从问题到解决方案一般的问题我们有一般的思考方式,而特殊的问题经过总结可以形成特定的解决方案,供今后调用。这需要长时间的积累。
2023-04-18 16:03:27 256 1
原创 什么计算机系统?——计算,存储与通信。
一句话:系统本身就是一个计算+存储系统,该系统为其他软件系统提供共同的抽象概念和运行环境,不同系统之间存在通信关系。
2023-04-18 16:02:09 372
原创 300. 最长递增子序列
300. 最长递增子序列题目描述思路分析代码实现题目描述点这里思路分析朴素做法是Dp O(n2)(n^2)(n2)f[i]:以i结尾的最长上升子序列的长度f[i]:以i结尾的最长上升子序列的长度f[i]:以i结尾的最长上升子序列的长度f[i]=max(1,f[j]+1)(对所有0<=j<i)f[i]=max(1,f[j]+1) (对所有0<=j<i)f[i]=max(1,f[j]+1)(对所有0<=j<i)最优做法是贪心 O(nlogn)(nlogn)(nl
2021-11-21 10:37:38 677
原创 299. 猜数字游戏
299. 猜数字游戏题目描述思路分析代码实现题目描述点这里思路分析哈希表求总数和好求的,另一个用减法求。代码实现class Solution {public: string getHint(string secret, string guess) { unordered_map<char,int> cnt; for(auto c:secret) cnt[c]++; int tot=0; for(auto c:
2021-11-21 10:04:12 3634
原创 297. 二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化题目描述思路分析代码实现题目描述点这里思路分析二叉树的遍历相关带有空的前序遍历可以唯一确定二叉树。因此这里我们按照前序遍历序列化。代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left
2021-11-21 09:50:03 672
原创 295. 数据流的中位数
295. 数据流的中位数题目描述思路分析代码实现题目描述点这里思路分析堆的经典变形——对顶堆:动态维护中位数代码实现class MedianFinder {public: priority_queue<int,vector<int>,greater<int>> down; priority_queue<int,vector<int>,less<int>> up; MedianFinder() {
2021-11-21 09:27:32 258
原创 292. Nim 游戏
292. Nim 游戏题目描述思路分析代码实现题目描述点这里思路分析找规律发现n%4==0必输,否则有必胜策略。代码实现class Solution {public: bool canWinNim(int n) { if(n%4) return true; else return false; }};...
2021-11-21 09:19:15 3610
原创 290. 单词规律
290. 单词规律题目描述思路分析代码实现题目描述点这里思路分析哈希表哈希表去维护一个一一映射。代码实现class Solution {public: bool wordPattern(string pattern, string str) { vector<string> words; stringstream ssin(str); string word; while(ssin>>word)
2021-11-20 11:03:18 369
原创 289. 生命游戏
289. 生命游戏题目描述思路分析代码实现题目描述点这里思路分析模拟有点状态压缩的感觉,每个位置存两个信息代码实现class Solution {public: void gameOfLife(vector<vector<int>>& board) { if(board.empty()||board[0].empty()) return; int n=board.size(),m=board[0].size();
2021-11-20 10:40:23 3012
原创 287. 寻找重复数
287. 寻找重复数题目描述思路分析代码实现题目描述点这里思路分析方法1:二分方法2:转化为环形链表这个题代码实现//方法1:二分。二分数的大小范围,取个数大于一半的一边继续二分。class Solution {public: int findDuplicate(vector<int>& nums) { int l = 1, r = nums.size() - 1; while (l < r) { in
2021-11-20 09:34:23 293
原创 284. 窥探迭代器
284. 窥探迭代器题目描述思路分析代码实现题目描述点这里思路分析设计题给类增加一个缓存位置即可。代码实现/* * Below is the interface for Iterator, which is already defined for you. * **DO NOT** modify the interface for Iterator. * * class Iterator { * struct Data; * Data* data; * public:
2021-11-20 09:17:18 217
原创 283. 移动零
283. 移动零题目描述思路分析代码实现题目描述点这里思路分析模拟原地覆盖法代码实现class Solution {public: void moveZeroes(vector<int>& nums) { int k=0; for(auto x:nums){ if(x) nums[k++]=x; } while(k<nums.size()) nums[k++]=0;
2021-11-20 09:04:44 355
原创 282. 给表达式添加运算符
282. 给表达式添加运算符题目描述思路分析代码实现题目描述点这里思路分析用a+b*X的结构维护一个暴搜代码实现class Solution {public:typedef long long LL; vector<string> ans; string path; vector<string> addOperators(string num, int target) { path.resize(100); df
2021-11-19 11:21:53 229
原创 279. 完全平方数
279. 完全平方数题目描述思路分析代码实现题目描述点这里思路分析当作完全背包来做没问题但是最优做法是数学定理1:拉格朗日四定理2:n能表示成3个数的平方和,当且仅当n不等于4a(8∗b+7)n 不等于4^{a}(8*b+7)n不等于4a(8∗b+7)有定理1得,ans<=4。直接答案从1到4进行枚举验证。代码实现class Solution {public: bool check(int n){ int q=sqrt(n); return
2021-11-19 09:00:38 226
原创 278. 第一个错误的版本
278. 第一个错误的版本题目描述思路分析代码实现题目描述点这里思路分析二分二分的本质就是找出性质的边界。代码实现// The API isBadVersion is defined for you.// bool isBadVersion(int version);class Solution {public: typedef long long LL; int firstBadVersion(int n) { LL l=1,r=n;
2021-11-19 08:47:51 194
原创 275. H 指数 II
275. H 指数 II题目描述思路分析代码实现题目描述点这里思路分析二分另外,有序+O(logn)复杂度是对二分最好的暗示。代码实现class Solution {public: int hIndex(vector<int>& citations) { int l=0,r=citations.size()-1; while(l<r){ int mid=l+r>>1;
2021-11-19 08:37:03 186
原创 274. H 指数
274. H 指数题目描述思路分析代码实现题目描述点这里思路分析直接排序扫描即可,时间复杂度O(nlogn)代码实现class Solution {public: int hIndex(vector<int>& citations) { sort(citations.begin(),citations.end()); int res=0; for(int i=0;i<citations.size();i++){
2021-11-19 08:32:01 253
原创 273. 整数转换英文表示
273. 整数转换英文表示题目描述思路分析代码实现题目描述点这里思路分析模拟题首先英文数字结构为XXX,XXX,XXX。第一个逗号是Billion,第二个逗号是Million,第三个逗号是Thousand。然后每三位是一个整体,可以用一个get函数来输出。代码实现class Solution {public: string num0_19[20]={ "Zero","One","Two","Three","Four","Five","Six","Seven",
2021-11-18 11:19:24 239
原创 268. 丢失的数字
268. 丢失的数字题目描述思路分析代码实现题目描述点这里思路分析模拟题代码实现class Solution {public: int missingNumber(vector<int>& nums) { int n=nums.size(); int sum=n*(n+1)/2; for(auto x:nums) sum-=x; return sum; }};...
2021-11-18 10:38:46 83
原创 264. 丑数 II
264. 丑数 II题目描述思路分析代码实现题目描述点这里思路分析看这道题代码实现class Solution {public: int nthUglyNumber(int n) { if(!n)return 0; int i=0,j=0,k=0; vector<int> ans(1,1); while(--n){ int t=min(ans[i]*2,min(ans[j]*3,ans[k
2021-11-18 10:36:14 70
原创 263. 丑数
263. 丑数题目描述思路分析代码实现题目描述点这里思路分析因数分解代码实现class Solution {public: bool isUgly(int n) { if(n<1)return false; if(n==1)return true; else{ while(n%2==0) n/=2; while(n%3==0) n/=3; while(n%5==
2021-11-18 10:18:26 248
原创 260. 只出现一次的数字 III
260. 只出现一次的数字 III题目描述思路分析代码实现题目描述点这里思路分析位运算先把所有数异或,最终结果中找某位不同的数。然后把所有数按照该为1/0分类。每类的结果对应一个答案。代码实现class Solution {public: vector<int> singleNumber(vector<int>& nums) { int res=0; for(auto x:nums) res^=x; in
2021-11-18 10:15:59 194
原创 258. 各位相加
258. 各位相加题目描述思路分析代码实现题目描述点这里思路分析同余规律:如果一次变换操作记作f,则f(x)≡规律:如果一次变换操作记作f,则f(x) \equiv规律:如果一次变换操作记作f,则f(x)≡ x(mod 9)x(mod\ 9)x(mod 9)所以直接对9取余数就可以做了。代码实现class Solution {public: int addDigits(int num) { if(num==0) return 0;
2021-11-17 14:30:27 133
原创 257. 二叉树的所有路径
257. 二叉树的所有路径题目描述思路分析代码实现题目描述点这里思路分析二叉树+dfs暴搜+记录方案代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * T
2021-11-17 14:19:24 204
原创 242. 有效的字母异位词
242. 有效的字母异位词题目描述思路分析代码实现题目描述点这里思路分析哈希表的简单应用代码实现class Solution {public: bool isAnagram(string s, string t) { unordered_map<char,int> ss,tt; for(auto c:s) ss[c]++; for(auto c:t) tt[c]++; return ss==tt; }
2021-11-17 14:14:54 77
原创 241. 为运算表达式设计优先级
241. 为运算表达式设计优先级题目描述思路分析代码实现题目描述点这里思路分析表达式计算-表达式树-递归背景知识:中缀表达式和表达式树一一对应。这道题从表达式树的角度思考来说和这道题完全相同。我们还可以直接从递归来做。代码实现class Solution {public: vector<string> expr; vector<int> diffWaysToCompute(string s) { for(int i=0;i<s
2021-11-17 14:11:07 111
原创 240. 搜索二维矩阵 II
240. 搜索二维矩阵 II题目描述思路分析代码实现题目描述点这里思路分析思维+模拟想法:从左下角开始,每次排除一行或者一列。可以达到线性复杂度。代码实现class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int n=matrix.size(),m=matrix[0].size(); int x=n-1,
2021-11-17 13:50:05 72
原创 239. 滑动窗口最大值
239. 滑动窗口最大值题目描述思路分析代码实现题目描述点这里思路分析经典单调队列应用——滑动窗口问题可以看成模板题。代码实现class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { deque<int> q; vector<int> ans; for(int i=0;i<
2021-11-16 11:42:47 567
原创 238. 除自身以外数组的乘积
238. 除自身以外数组的乘积题目描述思路分析代码实现题目描述点这里思路分析前缀和思想求前缀积,再从后往前遍历一遍更新下ans。代码实现class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { int n=nums.size(); vector<int> ans(n,1); for(int i=1;i&
2021-11-16 11:35:33 283
原创 237. 删除链表中的节点
237. 删除链表中的节点题目描述思路分析代码实现题目描述点这里思路分析经典链表删除节点的trick替换下一个点代码实现/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: v
2021-11-16 11:27:42 418
原创 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先题目描述思路分析代码实现题目描述点这里思路分析二叉树+递归递归找左右子树的p和q,左边没点去右边,右边没点去左边。代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri
2021-11-16 11:24:44 636
原创 235. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先题目描述思路分析代码实现题目描述点这里思路分析二叉树+递归主要是判断p和q相对root的分布,分别三种情况:root在中间,root在左边,root在右边。递归处理。代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int
2021-11-16 11:05:22 451
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人