自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(342)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法竞赛当中的思考方法——方法论篇。

几乎任何领域的任何问题的解决方案,都可以看作是“某个结构上的朴素方法的优化“。计算机只能处理规模有限的问题,在给定规模且不考虑效率的情况下,问题一定存在朴素解法。具体手段有直接模拟 / 利用bit枚举 / 各种搜索算法等。具体方法:从问题到解决方案一般的问题我们有一般的思考方式,而特殊的问题经过总结可以形成特定的解决方案,供今后调用。这需要长时间的积累。

2023-04-18 16:03:27 160 1

原创 什么计算机系统?——计算,存储与通信。

一句话:系统本身就是一个计算+存储系统,该系统为其他软件系统提供共同的抽象概念和运行环境,不同系统之间存在通信关系。

2023-04-18 16:02:09 235

原创 OSI七层模型介绍

关于OSI七层模型各个层的介绍、和上下层关系以及常见协议。

2022-10-25 20:33:24 1288

原创 构建自己的语言工具包——关于编程语言,我们需要关注什么?

用系统的思维,快速了解并学习一门编程语言的核心内容。

2022-10-25 19:35:22 272

原创 物理层面实现“信息存储”——以计算机内存为例

数字逻辑电路,触发器,寄存器,触发器。

2021-12-21 14:50:31 709 1

原创 时序逻辑电路的分析与设计

时序逻辑电路的基本分析和设计方法。

2021-12-21 14:15:56 2596

原创 组合逻辑电路的分析与设计

数字电路——数字逻辑之组合逻辑的设计与实现

2021-12-13 19:55:37 1144

原创 一文梳理“递推关系”

一文梳理数学和算法中的递推关系

2021-12-11 19:11:42 3190

原创 初探计算机系统——a big picture

计算机系统初探,GoGoGo!

2021-12-11 12:00:29 197

原创 《数据结构与算法》模板大全(数千行代码)

千行数据结构和算法代码+详细注释。

2021-12-11 11:38:34 278

原创 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 594

原创 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 3494

原创 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 588

原创 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 210

原创 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 3553

原创 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 308

原创 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 2941

原创 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 203

原创 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 202

原创 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 286

原创 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 202

原创 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 179

原创 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 165

原创 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 173

原创 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 165

原创 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 225

原创 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 54

原创 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 60

原创 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 183

原创 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 185

原创 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 70

原创 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 193

原创 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 70

原创 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 59

原创 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 61

原创 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 519

原创 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 213

原创 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 371

原创 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 628

原创 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 387

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除