- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 艰难的SIC自我救赎之路(无导师指导自救记录,共勉)
前言本人C9院校本科保研本校,通信工程,学硕,毕业要求有硬性规定需要发表SCI。保研时期的偷懒躺平想法,让我后期花费了更多的心力,也承受了更多的打击。SCI还在继续,失败了不过是再次爬起。和众多自力更生的硕士研究生共勉。在没有导师指导的情况下,对于我来说,最好的办法就是不断投稿按照审稿人的建议修正,这种方法虽然可行,但是会比较浪费时间,因为并不是每一次都能遇到负责的审稿人和编辑。在时间有限的前提下,建议尽量选择速度快的期刊,可以早日拿到审稿人的comments,同时建议不断产出新文章,这样可以多线程操
2021-11-18 14:43:35
10449
11
原创 剑指 Offer 36. 二叉搜索树与双向链表
二叉树为中序遍历递增序列。解法一/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node() {} Node(int _val) { val = _val; left = NULL; right = NULL; } Node(int _val, Node* _left, ...
2021-05-27 15:34:32
161
原创 剑指 Offer 51. 数组中的逆序对
解法一 归并排序速度比较慢class Solution {public: int merge(vector<int>& num,int l, int r){ if(l>=r) return 0; int mid = l+r>>1;//r右移一位 int res = merge(num,l,mid)+merge(num,mid+1,r); int i= l,j=mid+1; v.
2021-05-27 15:06:58
164
原创 剑指 Offer 34. 二叉树中和为某一值的路径
解法一dfs两边遍历,但是不知道为什么要root为终节点时才停止,但是如果root不是最下面的节点,会报错class Solution {public: vector<int> path; vector<vector<int>> ans; void dfs(TreeNode* root,int sum){ if(!root) return; path.push_back(root->val); .
2021-04-27 16:58:29
155
原创 剑指 Offer 43. 1~n 整数中 1 出现的次数
解法一暴力遍历会超时,找规律class Solution {public: int countDigitOne(int n) { int count = 0; long i = 1;//指当前遍历的位数,1指个位,10指十位 while(n/i!=0){ long high = n/(10*i);//将当前位置的所有高位都存在high中 long cur = (n/i)%10;//将当前位存在c.
2021-04-27 16:06:02
109
原创 剑指 Offer 68 - II. 二叉树的最近公共祖先
解法一 递归class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root == nullptr || root == p || root ==q) return root; TreeNode* left = lowestCommonAncestor(root->left,p,q); Tre.
2021-04-27 12:09:06
118
原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
解法一是有序的二叉树,左中右大小顺序。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode*.
2021-04-23 14:58:29
100
原创 剑指 Offer 67. 把字符串转换成整数
解法一存在long//使用longclass Solution {public: int strToInt(string str) { int i = 0, flag = 1;//默认flag为正数 long res = 0; while(str[i]==' ') i++; if(str[i] == '-') flag = -1; if(str[i] == '-' || str[i] == '+' ) i++;.
2021-04-13 23:50:00
87
原创 剑指 Offer 14- II. 剪绳子 II
解法一贪心算法,考虑数据溢出的问题class Solution {public: int cuttingRope(int n) { if(n<=3) return n-1; long res =1; while(n>4){ n = n-3; res = res*3%(1000000007); } res = res*n%(1000000007); .
2021-04-13 23:22:23
115
原创 剑指 Offer 14- I. 剪绳子
解法一动态规划class Solution {public: int cuttingRope(int n) { if(n<=3) return n-1; vector<int> dp(n+1); dp[1] = 1; dp[2] = 2; dp[3] = 3;//当n大于3时,<=3的部分可以不继续拆分,它本身的长度作为dp值 for (int i = 4; i <=.
2021-04-13 23:16:00
88
原创 剑指 Offer 35. 复杂链表的复制
解法一使用Hash建立映射表class Solution {public: Node* copyRandomList(Node* head) { if(head==nullptr) return nullptr; Node* cur=head; unordered_map<Node*,Node*> map; while(cur!=nullptr){ map[cur]=new Node(cur-.
2021-04-13 16:21:42
86
原创 剑指 Offer 13. 机器人的运动范围
解法一广度优先搜索,使用pair,以及队列queue,先进先出//广度优先搜索class Solution { int get(int x){ int res = 0; for ( ; x; x/=10) { res+=x % 10; } return res; }public: int movingCount(int m, int n, int k) { .
2021-04-13 16:16:54
145
3
原创 剑指 Offer 19. 正则表达式匹配
解法一class Solution {public: bool isMatch(string s, string p) { int slen = s.size(), plen = p.size(); vector< vector<bool>> dp(slen+1,vector<bool>(plen+1,false)); dp[0][0] = true; //初始化首行 for (.
2021-04-07 15:55:49
91
原创 剑指 Offer 33. 二叉搜索树的后序遍历序列
解法一递归class Solution {public: bool verifyPostorder(vector<int>& postorder) { if(postorder.size()==0) return true; return rever(postorder, 0 ,postorder.size()-1); } bool rever(vector<int>& postorder, int l.
2021-03-13 10:27:19
80
原创 剑指 Offer 60. n个骰子的点数
解法一动态规划,每多一位n多进行一轮class Solution {public: vector<double> dicesProbability(int n) { vector<double> dp(6,1.0/6.0); for (int i = 2; i <= n; i++) { vector<double> temp(5*i+1,0); for (.
2021-03-12 16:42:33
115
原创 剑指 Offer 56 - II. 数组中数字出现的次数 II
解法一排序class Solution {public: int singleNumber(vector<int>& nums) { sort(nums.begin(),nums.end());//排序 for (int i = 0; i < nums.size()-2; i+=3)//注意跳出循环条件 { if(nums[i]!=nums[i+2]) return nums[i];//每隔三个.
2021-03-12 15:19:32
109
原创 剑指 Offer 56 - I. 数组中数字出现的次数
解法一异或运算有个重要的性质,两个相同数字异或为 0 ,即对于任意整数 a,有a⊕a=0 。题中有两个不同的数字,需要把二者分组,各组别自行异或,最终可以获得落单的数字。class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int x=0,y=0,n=0,m=1; for(int num:nums ){ n^=num;.
2021-03-12 14:14:07
85
原创 剑指 Offer 66. 构建乘积数组
解法一双向遍历,利用表格进行划分可以把计算拆成两部分从上到下,左下角一次遍历,计算出B[1]~B[3]的乘积从下到上,右上角一次遍历,计算出B[2]~B[0]的乘积这里用的技巧是基于上一个B[i-1]来计算,即 B[i] = B[i-1] * A[i-1]class Solution {public: vector<int> constructArr(vector<int>& a) { int n =a.size(); .
2021-03-11 17:11:11
89
原创 剑指 Offer 63. 股票的最大利润
解法一双循环暴力破解 可能会导致超时class Solution {public: int maxProfit(vector<int>& prices) { int ans = 0; for (int i = 0; i < prices.size(); i++) { for (int j = i+1; j < prices.size(); j++) { .
2021-03-11 16:29:54
120
原创 剑指 Offer 62. 圆圈中最后剩下的数字
解法一著名的约瑟夫环问题class Solution {public: int lastRemaining(int n, int m) { int x=0; for (int i = 2; i <=n; i++) { x=(x+m)%i; } return x; }};约瑟夫环,公式推导过程...
2021-03-11 15:28:55
80
原创 剑指 Offer 61. 扑克牌中的顺子
解法一假设输入是无序的class Solution {public: bool isStraight(vector<int>& nums) { int maxV=0,minV=13; int excited[14]; for (int i = 0; i < nums.size(); i++) { if(nums[i]!=0){ if(excite.
2021-03-11 14:32:51
83
原创 剑指 Offer 59 - II. 队列的最大值
解法一双指针class MaxQueue {public: int q[20000];//要足够大 int begin=0,end=0; MaxQueue() { } int max_value() { int ans=-1; for (int i = begin; i != end ; i++) { ans = max(ans,q[i]); } .
2021-03-09 20:07:02
83
原创 剑指 Offer 59 - I. 滑动窗口的最大值
解法一for循环class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> ans; if(nums.size()==0) return ans; for (int i = 0; i <= nums.size()-k; i++) { .
2021-03-09 16:21:35
87
原创 剑指 Offer 20. 表示数值的字符串
解法一注意边界条件1.从第一个不为空格的字符到最后一个不为空格的字符,中间不得出现任何空格。2.’.’ 只能出现一次,而且不可以出现在 ‘e’ 的后面,且紧贴着 ‘.’ 的左边或者右边或者两边必须有数字(也就是不能是一个单独的 ‘.’)。3.‘e’ 只能出现一次,而且紧贴着 ‘e’ 的左边必须有数字。4.’+’ 和 ‘-’ 要么在第一位,要么紧随 ‘e’ 后。5.最后一位不可以是 ‘e’ 或 ‘+’ 或 ‘-’。class Solution {public: bool isNumb.
2021-03-09 10:59:57
124
原创 剑指 Offer 44. 数字序列中某一位的数字
解法一数学分析。class Solution {public: int findNthDigit(int n) { int i=1; while(n>0.9*pow(10,i)*i) n-=0.9*pow(10,i)*i,i++; string res=to_string(pow(10,i-1)+(n-1)/i);//找到对应的数字 return res[(n-1)%i]-'0';//找到对应的位 }};.
2021-03-08 17:15:11
97
原创 剑指 Offer 45. 把数组排成最小的数
解法一class Solution {public: string minNumber(vector<int>& nums) { if(nums.size()==1) return to_string(nums[0]); vector<string> s; string res=""; for (int i = 0; i < nums.size(); i++) { .
2021-03-08 15:49:37
81
原创 剑指 Offer 46. 把数字翻译成字符串
解法一 数学建模1.每次取最后两位数,rem = num % 1002.若rem > 25,则无法表示,即rem的个位和十位无法合一起,则用translateNum(num/10),表示前进一位3.若在00 <= rem <= 09,则无法表示,即rem的个位和十位无法合一起,所以用translateNum(num/10)4.若在10 <= rem <= 25,则可以分出两种表示方法,所以用translateNum(num/10) + translateNum(num.
2021-03-08 11:36:38
85
原创 剑指 Offer 47. 礼物的最大价值
解法一判断标准则是选左边的格子的最大价值或者上边格子的最大价值,然后加上该格子的礼物价值。class Solution {public: int maxValue(vector<vector<int>>& grid) { if(grid.size()==0 && grid[0].size()==0) return 0; int row = grid.size(), colums = grid[0].size();.
2021-03-07 23:33:35
84
原创 剑指 Offer 41. 数据流中的中位数
解法一左手一个大顶堆 + 右手一个小顶堆。class MedianFinder {public: /** initialize your data structure here. */ priority_queue<int,vector<int>,greater<int>> qleft;//大顶堆 priority_queue<int,vector<int>,less<int>> qright;//小顶.
2021-03-05 14:31:01
109
原创 剑指 Offer 48. 最长不含重复字符的子字符串
解法一双指针,left与right,各进行一次遍历class Solution {public: int lengthOfLongestSubstring(string s) { int maxlen=0; unordered_set<char> chars; int right = 0; for (int i = 0; i < s.size(); i++) { whil.
2021-03-05 13:59:17
71
原创 剑指 Offer 49. 丑数
解法一一个丑数乘以 2, 3, 5 之后, 一定还是一个丑数。class Solution {public: int nthUglyNumber(int n) { vector<int> dp(n,0); dp[0]=1; int p2=0,p3=0,p4=0; for (int i = 1; i < n; i++) { dp[i]=min(min(dp[p2]*2,dp.
2021-03-05 10:21:35
84
1
原创 剑指 Offer 38. 字符串的排列
解法一回溯法DFSclass Solution {public: vector<string> permutation(string s) { dfs(s,0); return res; }private: vector<string> res; void dfs(string s, int x){//第x位字符 if(x==s.size()-1){ res.push_.
2021-03-04 19:12:05
121
1
原创 剑指 Offer 58 - II. 左旋转字符串
原地操作法可以先将字符串的前半部分逆置,再将后半部分逆置,最后再整体逆置,就能实现字符串左旋。此方法占用资源最少。class Solution {public: string reverseLeftWords(string s, int n) { rever(s,0,n-1); rever(s,n,s.size()-1); rever(s,0,s.size()-1); return s; } void rev.
2021-03-04 18:33:58
124
4
原创 剑指 Offer 58 - I. 翻转单词顺序
解法一指针,倒序阅读,性能较差class Solution {public: string reverseWords(string s) { if(s.empty()) return s; int lenth = 0; string res=""; for (int i = s.size()-1; i>=0; i--) { if(s[i]==' ' && lenth!.
2021-03-04 14:58:52
135
1
原创 剑指 Offer 55 - II. 平衡二叉树
解法一class Solution {public: bool isBalanced(TreeNode* root) { return deepth(root)!=-1; } int deepth(TreeNode* root){ if(root==NULL) return 0; int left=deepth(root->left); if(left==-1) return -1; int.
2021-03-04 14:02:53
78
1
原创 剑指 Offer 55 - I. 二叉树的深度
思路树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、后序遍历;常见的 BFS : 层序遍历(即按层遍历)。解法一后序遍历DFS 递归三部曲1.确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。2.确定终止条件:如果为空节点的话,就返回0,表示高度为0。3.确定单层递归的逻辑:先求它的左子树的深度,再求的右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节.
2021-03-04 10:41:02
88
2
原创 剑指 Offer 32 - III. 从上到下打印二叉树 III
解法一用reverse函数对于海量数据效率太低,可以用双端队列deque要注意push的/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti.
2021-03-03 21:02:03
83
2
原创 剑指 Offer 32 - II. 从上到下打印二叉树 II
BFS模板vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; q.push(root); //... while(q.size()) { int size=q.size(); //... for(int i=0;i<size;i++) { TreeNo.
2021-03-02 12:33:18
85
原创 剑指 Offer 32 - I. 从上到下打印二叉树
解法一层次遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> lev.
2021-03-02 10:28:57
148
原创 剑指 Offer 26. 树的子结构
解法一递归遍历class Solution {public: bool isSubStructure(TreeNode* A, TreeNode* B) { bool res=false; if(A!=NULL && B!=NULL){ if(A->val == B->val) res=help(A,B);//以其为起点判断是否为子树结构 if(!res) res=isSubStruc.
2021-03-01 23:07:45
71
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人