- 博客(76)
- 收藏
- 关注
原创 笔记:阅读论文的方法
一、快速阅读1、理解表格和图片(标题和注释),首先看论文有没有写的不太好的地方,之后思考能用这篇论文做什么,重点关注论文标题、引言、摘要。2、思考论文的逻辑,任务是什么,发现了什么,论文做出了什么贡献。3、论文类型:提出问题型、解决问题型、阐述和调查型4、引言很重要,论文解决了什么问题,迷人之处在哪,有什么新东西,为什么那么神奇。二、仔细阅读1、要敢于质疑,论文解决了一个问题,要思考论文是否正确、真正地解决了问题,方法是否足够简单,方法是否有局限性。若论文没有解决问题,我能解决吗。2、多找背景
2020-06-17 17:06:51
212
原创 leetcode练习题 search-for-a-range
解题思路二分查找,找到目标后,start向左找左边界,end向右找右边界,若数组中不存在目标元素则返回两个-1.算法复杂度可能不满足O(logn)代码class Solution {public: vector<int> searchRange(int A[], int n, int target) { int low = 0,high = n - 1;...
2020-03-27 15:21:47
201
原创 leetcode练习题 search-insert-position
解题思路若等于target则返回下标,若数组中有大于target的则返回第一个大于target的下标,否则数组中没有大于等于target的,target要插到数组的尾部,返回数组当前的长度即为要插入的下标。代码class Solution {public: int searchInsert(int A[], int n, int target) { int res ...
2020-03-26 17:42:05
126
原创 leetcode练习题 multiply-strings
解题思路类似于大整数乘法,先开辟一个整型数组,之后num1逐位与num2的每一位相乘,将结果存储在两个坐标相加的位置,之后将每一位修改为只存储一位数,进位往下一位叠加,最后将头部的0去掉,将结果转化为字符串,搞定!代码#include<algorithm>class Solution {public: string multiply(string num1, stri...
2020-03-26 17:22:00
123
原创 leetcode练习题 combination-sum-ii
解题思路和combination-sum类似,只不过元素不能重复使用,故用一个visit数组标记已经选用了的元素,避免重复选用。代码class Solution {public: bool visit[10001]; void dfs(vector<int>num,int target,vector<vector<int>> &r...
2020-03-26 15:13:03
71
原创 leetcode练习题combination-sum
解题思路本质是dfs,首先将candidates排序,candidates中的元素可以重复选用,若target为0,则用一个tmp数组复制当前cur数组并排序,在res中查看是否已有该结果,若没有则插入。若target不为零则在candidates中选满足小于等于target的元素并深度搜索,每次搜索结束要回溯,将该元素从cur中pop_back。代码class Solution {pub...
2020-03-26 15:00:43
90
原创 leetcode练习题 first-missing-positive
解题思路看了讨论区之后才有的思路,遍历数组,将元素i放到数组i - 1坐标下,之后遍历数组找到第一个不匹配的坐标,返回该坐标加一即为不在给定数组里的最小整数。代码class Solution {public: int firstMissingPositive(int A[], int n) { int i = 0; while(i < n){...
2020-03-26 12:24:28
92
原创 leetcode练习题 anagrams
解题思路遍历字符串数组,将字符串的顺序调整为26个字母的顺序,并用一个map记录出现的次数,之后再遍历一次数组,若调整顺序后的字母出现的次数大于等于2的则将该字符串放入结果数组中,最后返回结果。代码class Solution {public: vector<string> anagrams(vector<string> &strs) { ...
2020-03-26 11:38:45
90
原创 leetcode练习题 spiral-matrix
解题思路设置left、right、up、down,之后按顺序将二维数组的元素放入数组中,若四个变量变化过程中超出范围则break。代码class Solution {public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int&g...
2020-03-26 11:20:55
81
原创 leetcode练习题 n-queens-ii
解题思路与n-queens差不多,只不过row == n时不需要存储结果只需要将解法计数加一。代码class Solution {public: int choose[10001]; void dfs(int &res,int row,int n){ if(row == n){ res++; } ...
2020-03-26 10:05:13
78
原创 leetcode练习题 n-queens
解题思路深度搜索,用一个数组choose来标记每一行的摆放皇后的列,若row == n则存储结果,否则,在第row+1行放置皇后时,改行有n列,逐列放置皇后进行测试,检查与前面的行放置的皇后是否冲突,不冲突则进行下一行的摆放。处在同一列则冲突,斜线也冲突。代码#define MAXN 10001class Solution {public: void dfs(vector<...
2020-03-26 09:59:23
85
原创 leetcode练习题 recover-binary-search-tree
解题思路用pre保存先序遍历的上一个结点,用a和b保存要交换的两个结点,若pre不为空且pre的值大于等于当前根节点的值,修改a、b的值并将pre修改为当前根结点,之后先序遍历根结点的右子树,最后若a、b不为空,则交换a和b的值。代码class Solution {public: void preorder(TreeNode *root,TreeNode *&pre,Tre...
2020-03-25 22:05:09
75
原创 leetcode练习题 validate-binary-search-tree
解题思路中序遍历二叉树,检查结果是否为递增序列,若是则为二叉搜索树。代码class Solution {public: void inorder(TreeNode *root,vector<int> &res){ if(root != NULL){ inorder(root->left,res); ...
2020-03-25 20:50:16
80
原创 leetcode练习题 binary-tree-inorder-traversal
解题思路简单中序遍历代码class Solution {public: void inorder(TreeNode *root,vector<int> &res){ if(root != NULL){ inorder(root->left,res); res.push_back(root-&g...
2020-03-25 20:12:42
79
原创 leetcode练习题 same-tree
解题思路若pq都为空结点则返回true,若只有一个为空则返回false。否则检查两者的值是否相同、左右子树是否相同,整个过程通过递归实现。代码class Solution {public: bool check(TreeNode *p,TreeNode *q){ if(p == NULL && q == NULL) retur...
2020-03-25 17:48:54
100
原创 leetcode练习题symmetric-tree
解题思路check函数中,若x、y皆为空,则return true,若x、y其中之一为空,则return false,否则检测xy的值是否相等以及x的左和y的右、x的右和y的左是否对称。整个过程用递归实现。代码class Solution {public: bool check(TreeNode *x,TreeNode *y){ if(x == NULL &...
2020-03-25 17:38:34
99
原创 leetcode练习题binary-tree-zigzag-level-order-traversal
解题思路题目要求为之字形层次遍历,故与层次遍历不同的是,可以设置一个栈,并设置一个标记,当标记对二求余为0时,表示当前层的下一层的遍历顺序是从右往左,则检测当前层的孩子结点时,则先左孩子入栈再右孩子入栈,最后当前层遍历完毕时,将栈中的元素从栈顶到栈底依次插入队列中。当标记对二求余为1时,表示下一层的遍历顺序是从左往右,则检测当前层的孩子结点时,先右孩子入栈,再左孩子入栈,当前层遍历完毕时,此时从...
2020-03-25 17:26:06
121
原创 leetcode练习题 binary-tree-level-order-traversal
解题思路用一个队列进行二叉树的层次遍历,先将根放入队列中,之后队列非空时,将当前层的pop出来,若有左右子树则入队。直到队列为空,遍历结束。代码class Solution {public: vector<vector<int> > levelOrder(TreeNode *root) { vector<vector<int>...
2020-03-25 16:25:19
70
原创 leetcode练习题 maximum-depth-of-binary-tree
解题思路若结点为空,则返回0,否则计算该结点左右子树的最大深度,最后返回左右子树最大深度的较大值 + 1.即为最终结果。代码class Solution {public: int maxDepth(TreeNode *root) { if(root == NULL) return 0; int l = maxDepth(roo...
2020-03-25 15:55:53
78
原创 leetcode练习题 construct-binary-tree-from-preorder-and-inorder-traversal
解题思路前序遍历第一个结点为根,在中序遍历中找到该结点,从而将中序遍历分为左右子树,准确定位左右子树在前序遍历中的起点和终点,之后递归建立左右子树,设置递归出口,最后返回根。代码class Solution {public: TreeNode *buildTree(vector<int> &preorder,vector<int> &inor...
2020-03-25 15:52:03
226
原创 leetcode练习题 search-in-rotated-sorted-array-ii
解题思路直接暴力搜索吧代码class Solution {public: bool search(int A[], int n, int target) { bool flag = false; for(int i = 0;i < n;i++){ if(A[i] == target){ f...
2020-03-25 14:52:45
114
原创 leetcode练习题 search-in-rotated-sorted-array
解题思路直接暴力搜索吧代码#include<algorithm>class Solution {public: int search(int A[], int n, int target) { int res = -1; for(int i = 0;i < n;i++){ if(A[i] == target...
2020-03-25 14:49:55
63
原创 leetcode练习题 remove-duplicates-from-sorted-array-ii
解题思路用一个map来记录元素出现的次数,若出现次数为0或为1,则修改出现次数且i++,否则将i+1到j的元素往前移一位,最后返回数组长度 j+1。代码#include<map>class Solution {public: int removeDuplicates(int A[], int n) { int i = 0,j = n - 1; ...
2020-03-25 14:33:59
95
原创 leetcode练习题 two-sum
解题思路简单遍历数组代码class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { vector<int>res; bool flag = false; for(int k = 0;k <...
2020-03-25 14:21:54
112
原创 leetcode练习题 median-of-two-sorted-arrays
解题思路参考了讨论区的代码思路,若两个数组长度和为奇数则直接找中位数,长度和为偶数则取中间两个数的算术平均值。寻找中位数主要是找第k个数的问题,首先保持短数组在前,若短数组的长度为0则第k个数只能在长数组中,返回长数组的第k个元素,若k为1且短数组长度不为0,则返回两个数组第一个元素的最小值。假设两个数组的长度都大于等于k/2,若短数组的第k/2个元素的值小于长数组的第k/2个元素的值,则合...
2020-03-25 14:16:16
70
原创 leetcode练习题 longest-substring-without-repeating-characters
解题思路用一个res保存当前的最长不重复子串,之后遍历字符串,设置当前的最长不重复子串为当前字符,之后从该字符的后一个字符串开始,若当前的最长不重复子串不包含该字符,则将该字符包含进来,否则break。之后与res进行比较,用res保存较大值。字符串遍历结束后res即为结果。代码class Solution {public: int lengthOfLongestSubstring...
2020-03-25 11:30:55
99
原创 leetcode练习题 add-two-numbers
解题思路创建一个头结点,之后遍历两个链表,每次循环两个结点的值以及进位相加,更新进位的值,并用相加的结果的个位作为新结点的值链入新链表中,之后判断是否有未遍历完的链表,将未遍历完的链表用left保存,若该结点的值加上进位的结果小于十则直接修改left的值并链入新链表就好了,否则与进位相加可能会修改每一个结点的值,不断遍历直到left为空。最后检查进位是否非零,非零的话还要建立一个结点,完成。代...
2020-03-25 11:12:04
78
原创 leetcode练习题 reverse-linked-list-ii
解题思路开辟一个新的链表结点作为头结点,首先先找到链表的第m、n个结点,用p、q记录下来,若p之前还存在结点,则先将前面的链表插到头结点之后,并且让tail移至前面部分的最后一个结点,之后p到q采用头插法插入链表中,当p移动到q->next时结束,此时再将tail移动到链表的末端,前面采用头插法时tail->next已置为NULL,已与p断开了,最后将原链表的剩余结点直接连接到新链表...
2020-03-25 09:25:33
72
原创 leetcode练习题 generate-parentheses
解题思路这道题是参考了别人的思路之后自己再按思路写出来的,主要思路为每次操作当前的字符串可以加左括号也可以加右括号,当左右括号都用完时将当前字符串放入结果数组中,左括号有剩余就可以加,而加右括号的条件不仅需要还有右括号还需要左括号剩余数量少于右括号即已经放置了左括号才能放相应的右括号,整个过程通过递归实现。代码class Solution {public: void dfs(vec...
2020-03-24 22:44:41
68
原创 leetcode练习题 word-ladder
解题思路首先定义一个函数用于检查两个字符串是否只有一个字符不同。采用广度优先搜索,定义一个队列,先将start字符串放入队列中,之后队列不为空时,用size记录当前队列中字符串的个数,表明当前的size个字符串中若有与目标字符串相差一个字符的字符串,则转换序列长度为res+1.否则将与该字符串相差一个字符且存在于字典的字符串全部入队,且在字典中删除相应的字符串。这些字符串若能成功转换为目标字符...
2020-03-24 18:01:05
85
原创 leetcode练习题 count-and-say
解题思路先初始化字符串为第一个字符串"1",之后从2开始到n,这是两个数组,一个用于保存数字,一个用于保存该数字连续出现的次数,便于say,之后从0开始遍历当前的res字符串,每遇到一个字符先将它转化为数字保存下来,之后计算它连续出现了多少次,并且将该数字连续出现的次数记录下来,最后将出现次数也保存下来,当遍历完当前的res字符串后,则进行say环节,将遇到的数字和次数say出来保存在res字符...
2020-03-24 14:49:47
86
原创 leetcode练习题 merge-k-sorted-lists
解题思路采用优先队列,对优先队列的比较规则进行重载,之后每次从队列中取出值较小的结点,采用尾插法插入新链表中,若该结点还有后续结点,则将后续结点也插入优先队列中参与比较。知道优先队列为空,返回结果。代码#include<queue>struct compare{ bool operator()(const ListNode* l1,const ListNode* l2...
2020-03-24 14:37:23
69
原创 leetcode练习题 reverse-nodes-in-k-group
解题思路先找到当前要倒转的起点和终点,若终点为空,表明不够数量则将此时的p以后的链表直接插到tail后面,结束。若终点不为空,则采用头插法插到tail后面,并且tail移动到该链表的尾部,重复该过程。代码class Solution {public: ListNode *reverseKGroup(ListNode *head, int k) { if (head == NULL |...
2020-03-23 19:21:07
81
原创 leetcode练习题 swap-nodes-in-pairs
解题思路首先初始化一个map,设置罗马数字对应的值,当遇到IX这类情况,较小的值在较大的值左边,则代表的是10 (X) - 1(I) = 9。遇到III或XI,即左边的值大于等于右边的值这种情况则直接相加。用preNum存储上一个遇到的罗马数字的值便于比较。代码#include<map>class Solution {public: int romanToInt(st...
2020-03-23 14:33:10
98
原创 leetcode练习题 swap-nodes-in-pairs
解题思路建立一个头结点,采用尾插法,遍历数组,p存储当前遍历的结点,q存储p的下一个结点,若q为空,说明已经遍历到末尾了,将p插入新链表后break,否则将q和p插入新链表中,修改p为原q的下一个结点。代码class Solution {public: ListNode *swapPairs(ListNode *head) { if(head == NULL) ...
2020-03-23 11:13:19
80
原创 leetcode练习题 remove-duplicates-from-sorted-array
解题思路用一个map记录出现过的元素,之后遍历数组,若是没有出现过的元素,则修改map,继续遍历,若出现过,则将该元素的后一个元素开始到j的元素往前移一个位置,将该元素放到j位置,j–。最后返回(j + 1)即为数组的长度。代码#include<map>class Solution {public: int removeDuplicates(int A[], int ...
2020-03-23 10:44:23
68
原创 element练习题 remove-element
解题思路初始化i、j,i用于遍历数组,j用于交换元素,遍历数组若元素值与elem相等,则与j下标的元素兑换,j–,若元素值与elem不相等,则继续遍历。最后i > j时结束遍历,返回j+1即为数组的长度。代码class Solution {public: int removeElement(int A[], int n, int elem) { int j =...
2020-03-23 09:46:57
115
原创 leetcode练习题 next-permutation
解题思路找字典序的下一个数,通俗理解,以19为例,19下一个数是20,将十位扩大一点,各位变为最小。故可以从后往前找,后半部分递减,找到一个num[m + 1] >num[m],m+1到末尾相当于上面例子的个位,找到m+1到末尾比num[m]大的最小项,与num[m]交换,最后将m+1到末尾升序排列,相当于个位化为最小,十位变大了一点,从而得到字典序的下一个数。若找不到num[m + 1]...
2020-03-22 23:29:03
109
原创 leetcode练习题 insert-interval
解题思路先将该新区间插入数组中,之后按区间的起始点进行排序,之后遍历该数组,对区间进行合并,最后返回结果。代码#include<algorithm>bool cmp(const Interval& a,const Interval& b){ return a.start < b.start;}class Solution {public:...
2020-03-22 15:22:32
80
原创 leetcode练习题 rotate-list
解题思路指针p先走k步,若p为空,则从头开始继续走。之后让q指针从头开始与p同时往后走(当p->next不为空的时候),若q->next为空的时候,则链表不需要倒转,直接返回原链表,否则,将链表进行倒转,q->next到末尾作为新链表的前半部分,将原链表的头部到q作为新链表的后半部分,直接连接到p->next。代码class Solution {public: ...
2020-03-22 15:04:29
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人