01 2021 档案
摘要:有关C++字符串截取substr的用法 一、string s = "abcd"; string s1 = s.substr(2); // s1 = "cd" 表示截取从下标2开始到字符串末尾 二、string s = "abcd" string s1 = s.substr(1,2); //s1 =
阅读全文
摘要:题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。 代码 1 class Solution { 2 public: 3 vector<vector<string>>res; 4 vector<string>path; 5 bool check(st
阅读全文
摘要:题目 分析(按照y总思路) 首先先将题目进行转化,因为题目要求:在吃完 所有 第 i - 1 类糖果之前,不能 吃任何一颗第 i 类糖果。所以我们把已有的糖果种类糖果数看成一个线性数轴,如下: 只有数轴左边糖果吃完,才可以吃右边的糖果。接下来把能不能在给定的天数吃到某类的糖果这一问题转换为能不能在给
阅读全文
摘要:题目 https://leetcode-cn.com/problems/maximum-number-of-balls-in-a-box/ 代码 1 class Solution { 2 public: 3 int countBalls(int l, int h) { 4 vector<int>su
阅读全文
摘要:题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。 说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。 分析 这个题目又是组合的变形
阅读全文
摘要:题目 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 分析 此题和 77题
阅读全文
摘要:题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 分析 本题目实质依旧是
阅读全文
摘要:题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 分析 给定数字集合,找满足条件的组合。依旧是回溯问题,按照板子写就可,脑中一定要有回溯的搜索树的图形 代码 1 class Solution { 2 public: 3 vec
阅读全文
摘要:题目 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 分析 本题属于回溯中的组合问题 首先回溯问题的整体模板,如下(参考代码随想的Carl) 1 void backtracking(参数) { 2 if (终止条件) { 3 存放结果; 4 return; 5 } 6
阅读全文
摘要:题目 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 分析 1.统计每个数字出现的频率,用map哈希即可 2.找 Top K 问题,用优先级队列 关键是用小根堆还是大根堆,其实我的第一反应是建立大根堆,最后取k大根堆的头K个即可,这样时间复杂度是O(nlogn). 如果采用小根堆,每次维
阅读全文
摘要:题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 分析 求每个窗口内部的最大值问题,就等同于求连续特定区间内部的最大值最小值问题,这就是单调队列的应用之一。
阅读全文
摘要:数字转换为字符串 法一、利用<sstream>中的stringstream(字符串流) 1 int main(){ 2 3 int x; 4 string res; 5 stringstream ss; 6 cin>>x; ss<<x; ss>>res; 7 cout<<res<<endl; 8 9
阅读全文
摘要:题目 逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。逆波兰表达式主要有以下两个优点: 1.去掉括号后表达式无歧义,也可以依据次序计算出正确结果。2.适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。 思路 遇到数字则入栈;遇到算符则取出栈顶两个数字进
阅读全文
摘要:题目 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 代码 就跟对对碰一样,栈 1 class Solution { 2 public: 3 st
阅读全文
摘要:题目 分析 括号不匹配分为三种情况:左括号多了,右括号多了,不多不少但类型不匹配。 我们用一个栈保存左括号的应该匹配的右括号,就是每遇到一个左括号,将相应类型的右括号压栈。为什么要这样想 ?因为括号匹配的要求是: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 尤其是第二条
阅读全文
摘要:用栈实现队列 和 用队列实现栈 的思想不一样。 (1)用栈实现队列将定义两个栈,其中一个是输入栈,一个是输出栈。关键是弹出元素的实现,通过这个两个栈实现先入先出。如果输出栈为空时,要将输入栈中的所有元素压入输出栈。然后从输出栈弹出元素。判空条件是:输入输出栈都为空。 (2)用队列实现栈将定义两个队列
阅读全文
摘要:思路 本题就是二维前缀和的变形,把二维前缀和改为二维异或和 下图是y总算法基础课的二维前缀和的推导公式,就是容斥原理。 而本题目的异或,就是直接把加减号换为异或运算。因为异或运算就相当于不进位加法 最后再排下序找出第K大,这里学到了stl中nth_element()方法,这个比sort快,时间复杂度
阅读全文
摘要:转自:https://blog.csdn.net/sugarbliss/article/details/88050145 C++的STL库中的nth_element()方法,默认是求区间第k小的(划重点)。 举个栗子求第3小,对于 a[9]={4,7,6,9,1,8,2,3,5};nth_eleme
阅读全文
摘要:思路:来源于y总,自己卡住了 本题依旧是枚举,加些数组哈希统计字母出现次数(哈希专题遇到过)。 条件三,要让两个字符串的字母全部相等的最小操作次数 若两个字符串最终要变为同一个字母,假设是c,那需要的操作次数为:a.length() + b.length() - s1[c] - s2[c],其中 s
阅读全文
摘要:法一、直接暴力枚举 class Solution { public: bool check(string time,string res){ for(int i = 0;i < 5;i++){ if(time[i] == res[i] || time[i] == '?') continue; ret
阅读全文
摘要:转自:https://blog.csdn.net/masibuaa/article/details/5634886 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直
阅读全文
摘要:题目 给定一个字符串,逐个翻转字符串中的每个单词。 说明: 无空格字符构成一个 单词 。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 代码 一、 从后往前找到找到单词加入新字符串 1 class Solutio
阅读全文
摘要:题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 代码 法一、自己写的 1 class Solution { 2 public: 3 string replaceSpace(string s) { 4 string res; 5 for(int i = 0;i < s.length
阅读全文
摘要:题目 给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。 如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 代码 一、自己写的,有些冗长 1 class So
阅读全文
摘要:class Solution { public: void reverseString(vector<char>& s) { for(int i = 0,j = s.size()-1;i < s.size()/2;i++,j--){ swap(s[i],s[j]); } } };
阅读全文
摘要:代码 1 class Solution { 2 public: 3 vector<vector<int>> generateMatrix(int n) { 4 5 int startx = 0,starty = 0; //每个loop起始位置 6 int loop = n / 2; //循环次数,n
阅读全文
摘要:题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 代码 法一、直接暴力 1 class Solution { 2 public: 3 int minSubArrayLen(int
阅读全文
摘要:题目 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。 分析 本题眼熟,和 LeetCode242.有效字母的异位词基本一致。
阅读全文
摘要:题目 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。 分析 关键是如何想到用map,怎么用map?本题目和三数之和、四数之和题目有本质的区别,本题是经典哈希, 而那两道题目是双
阅读全文
摘要:题目 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]] 分析 依旧双指针,只不过两层循环,两次去重,细节方面需要注意 代码 1 clas
阅读全文
摘要:题目 这道题看似和两数之和的的哈希法,但用哈希比较麻烦 分析 双指针 1 class Solution { 2 public: 3 4 vector<vector<int>> threeSum(vector<int>& nums) { 5 vector<vector<int>>res; 6 sort
阅读全文
摘要:题目 编写一个算法来判断一个数 n 是不是快乐数。 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 F
阅读全文
摘要:题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 分析 本题目是经典哈希map使用的题目。 有关map的总结,见下图代码随想录的carl大佬图 本题不要求有序,所以使用unordered_map会快一些,但要注
阅读全文
摘要:题目 给定两个数组,编写一个函数来计算它们的交集。 分析 数组元素值可以很大,所以不适合直接开数组进行哈希,这里要学习另一种哈希方式:集合 集合有三种,区别见下面代码随想录的Carl大佬的表格,总结的很清晰。 由于题目中明确了不考虑元素的是否有序,所以我们可以使用unordered_set,这样查删
阅读全文
摘要:题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 代码 法一、排序后判断是否相等,因为题目中说了字符串都为26个小写字母。 t 是 s 的异位词等价于两个字符串排序后相等。以后要学会这个技巧 1 class Solution { 2 public: 3 bool
阅读全文
摘要:问题 安装好了vscode并且装上code runner插件后,运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果。 解决方法 打开系统cmd ,在窗口顶部条右击打开属性,把最下面的旧版控制台选项取消,即可
阅读全文
摘要:一、getchar()和cin.get() getchar()会将开头的空格或者回车作为输入 1 #include<iostream> 2 using namespace std; 3 int main(){ 4 char ch1 = getchar(); 5 char ch2 = getchar(
阅读全文
摘要:同LeetCode226翻转二叉树 1 class Solution { 2 public: 3 TreeNode* mirrorTree(TreeNode* root) { 4 if(root == NULL) return NULL; 5 TreeNode* node = root->left;
阅读全文
摘要:题目 class Solution { public: int ans = 0; int sumRootToLeaf(TreeNode* root) { dfs(root,0); return ans; } void dfs(TreeNode*root,int cur){ if(root== NUL
阅读全文
摘要:题目 1 class Solution { 2 public: 3 TreeNode* r1;TreeNode* r2; 4 bool isCousins(TreeNode* root, int x, int y) { 5 dfs(root,r1,x); 6 dfs(root,r2,y); 7 in
阅读全文
摘要:题目 1 class Solution { 2 public: 3 int flag = 0; 4 bool isUnivalTree(TreeNode* root){ 5 isUnivalTree1(root,root->val); 6 if(flag == 0) return true; 7 e
阅读全文
摘要:题目 1 class Solution { 2 public: 3 int sum = 0; 4 int rangeSumBST(TreeNode* root, int low, int high) { 5 dfs(root,low,high); 6 return sum; 7 } 8 void d
阅读全文
摘要:题目 法一、自己 1 class Solution { 2 public: 3 vector<int>res; 4 TreeNode* increasingBST(TreeNode* root) { 5 dfs(root); 6 TreeNode* p = new TreeNode(0); 7 Tr
阅读全文
摘要:题目 1 class Solution { 2 public: 3 vector<int>ans1; 4 vector<int>ans2; 5 bool leafSimilar(TreeNode* root1, TreeNode* root2) { 6 dfs(root1,ans1); 7 dfs(
阅读全文
摘要:题目 和LeetCode530没什么区别 1 class Solution { 2 public: 3 vector<int>ans; 4 int minDiffInBST(TreeNode* root) { 5 int min = INT_MAX;dfs(root); 6 for(int i =
阅读全文
摘要:题目 代码 简单递归 1 class Solution { 2 public: 3 TreeNode* searchBST(TreeNode* root, int val) { 4 if(!root) return NULL; 5 TreeNode* p; 6 if(root->val == val
阅读全文
摘要:题目 纯暴力 1 class Solution { 2 public: 3 vector<int>ans; 4 int findSecondMinimumValue(TreeNode* root) { 5 dfs(root); 6 sort(ans.begin(),ans.end()); 7 int
阅读全文
摘要:题目 直接暴力 1 class Solution { 2 public: 3 vector<int>ans; 4 bool findTarget(TreeNode* root, int k) { 5 dfs(root); 6 for(int i = 0;i <ans.size();i++) 7 fo
阅读全文
摘要:2014年斯坦福机器学习课程2-7 课程中主要介绍梯度下降算法找代价函数的最小值。我们知道梯度下降可以找到局部最优, 但不一定是全局最优。但如果convex function(凸函数),可以通过梯度下降找到全局最优解。 此时局部最优对应全局最优。于是恩达老师举了个凸函数的例子,弓形的曲面。但并没有具
阅读全文
摘要:题目 1 class Solution { 2 public: 3 vector<double>ans; 4 vector<double> averageOfLevels(TreeNode* root) { 5 if(!root) return ans; 6 queue<TreeNode*>q; 7
阅读全文
摘要:题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && !t2) return NULL; 5 if(t1 == NULL&& t2 != NULL) retur
阅读全文
摘要:题目 1 class Solution { 2 public: 3 vector<int>ans; 4 vector<int> postorder(Node* root) { 5 dfs(root); 6 return ans; 7 } 8 void dfs(Node* root){ 9 if(ro
阅读全文
摘要:题目 法一、递归 1 class Solution { 2 public: 3 vector<int>ans; 4 void dfs(Node* root){ 5 if(root!=NULL){ 6 ans.push_back(root->val); 7 for(int i = 0;i < root
阅读全文
摘要:题目 本题目一开始想要通过二叉树遍历KMP匹配,但看来实现比较复杂 不如直接暴力匹配,本题和LeetCode100.相同的树有共通之处 1 class Solution { 2 public: 3 bool isSubtree(TreeNode* s, TreeNode* t) { 4 if(!s
阅读全文
摘要:题目 1 class Solution { 2 public: 3 int ans = 0; 4 int findTilt(TreeNode* root) { 5 postOrder(root); 6 return ans; 7 } 8 int postOrder(TreeNode* root){
阅读全文
摘要:题目 法一、层序遍历 1 class Solution { 2 public: 3 int maxDepth(Node* root) { 4 if(root== NULL) return 0; 5 queue<Node*>q;int level = 0;int lc = 0; 6 q.push(ro
阅读全文
摘要:题目 1 class Solution { 2 public: 3 int minimum = INT_MIN; 4 vector<int>res; 5 int diameterOfBinaryTree(TreeNode* root) { 6 if(root == NULL) return 0; 7
阅读全文
摘要:题目 又是常见的BST,要利用BST的性质,即中序遍历是有序递增序列。 法一、中序遍历 1 class Solution { 2 public: 3 vector<int>res; 4 void InOrder(TreeNode* p){ 5 if(p!=NULL){ 6 InOrder(p->le
阅读全文
摘要:题目 分析(树为普通二叉树) 如果将本题的BST树换为普通的一棵树,应该怎么做?map来保存出现的值和频率之间的关系,然后对map的value进行排序,输出最大的value所对应的key。 代码 1 class Solution { 2 public: 3 vector<int>ans; //存放最
阅读全文
摘要:题目 法一、广度优先搜索 1 class Solution { 2 public: 3 int sumOfLeftLeaves(TreeNode* root) { 4 if(root == NULL) return 0; 5 if(root->left == NULL && root->right
阅读全文
摘要:题目 1 class Solution { 2 public: 3 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { 4 if((p->val - root->val) * (q->val - roo
阅读全文
摘要:题目 分析 翻转每个节点左右子树即可。 代码 前序遍历,递归法 1 class Solution { 2 public: 3 TreeNode* invertTree(TreeNode* root) { 4 if(root == NULL) return root; 5 TreeNode* node
阅读全文
摘要:题目 分析 深搜(一)精简 class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(root == NULL) return false; if(root->left == NULL && root->right
阅读全文
摘要:题目 深度优先搜索 1 class Solution { 2 public: 3 int minDepth(TreeNode* root) { 4 if(root == NULL) return 0; 5 if(root->left == NULL) return minDepth(root->ri
阅读全文
摘要:题目 1 class Solution { 2 public: 3 bool isBalanced(TreeNode* root) { 4 if(root == NULL) return true; 5 return abs(height(root->left)-height(root->right
阅读全文
摘要:题目 1 class Solution { 2 public: 3 TreeNode* sortedArrayToBST(vector<int>& nums) { 4 if(nums.size() == 0) return NULL; 5 return build_BST(nums,0,nums.s
阅读全文
摘要:题目 1 class Solution { 2 public: 3 vector<vector<int>> levelOrderBottom(TreeNode* root) { 4 auto levelOrder = vector<vector<int>> (); 5 if(root == NULL
阅读全文
摘要:题目 1 class Solution { 2 public: 3 int maxDepth(TreeNode* root) { 4 if(root == NULL) return 0; 5 //return maxDepth(root->left) > maxDepth(root->right)
阅读全文
摘要:题目 1 class Solution { 2 public: 3 4 bool isSymmetric(TreeNode* root) { 5 return check(root,root); 6 } 7 bool check(TreeNode* p,TreeNode* q) { 8 if(!p
阅读全文
摘要:题目 1 class Solution { 2 public: 3 bool isSameTree(TreeNode* p, TreeNode* q) { 4 if(p == NULL && q == NULL){ 5 return true; 6 }else if(p == NULL || q =
阅读全文
摘要:题目描述 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0),
阅读全文