剑指offer
C++练习
JIngles123
生命不息,奋斗不止
展开
-
AcWing 60. 礼物的最大价值(C++)- 线性dp
代码】AcWing 60. 礼物的最大价值(C++)- 线性dp。原创 2022-08-16 19:29:59 · 385 阅读 · 0 评论 -
AcWing 58. 把数组排成最小的数(C++)- 全序关系
代码】AcWing 58. 把数组排成最小的数(C++)- 全序关系。原创 2022-08-11 20:54:41 · 228 阅读 · 0 评论 -
AcWing 83. 股票的最大利润(C++)- 贪心、线性扫描
题目链接:https://www.acwing.com/problem/content/79/题目如下:class Solution {public: int maxDiff(vector<int>& nums) { if(nums.size()==0) return 0; //前i-1天的最小收益=当前卖出价格-最小买入价格 int res=0; int minVal=nums[0];原创 2022-05-07 23:50:14 · 550 阅读 · 0 评论 -
AcWing 86. 构建乘积数组(C++)- 前后缀分解
题目链接:https://www.acwing.com/problem/content/description/82/题目如下:class Solution {public: vector<int> multiply(const vector<int>& A) { //思路:答案数组的每个元素,先乘上所有位置的前缀乘积后,再乘上所有位置的后缀乘积 if(A.size()==0) return vector<int>(原创 2022-05-07 23:26:43 · 407 阅读 · 0 评论 -
AcWing 79. 滑动窗口的最大值(C++)- 单调队列、超详细注释
题目链接:https://www.acwing.com/problem/content/description/75/题目如下:class Solution {public: vector<int> maxInWindows(vector<int>& nums, int k) { vector<int> res; deque<int> que;//双端队列由vector实现,滑动窗口队列中存放的是数组下标原创 2022-05-03 00:12:54 · 685 阅读 · 0 评论 -
AcWing 85. 不用加减乘除做加法(C++)- 位运算、模拟
题目链接:https://www.acwing.com/problem/content/81/题目如下:class Solution {public: int add(int num1, int num2){ //加法器 while(num2){ int sum=num1^num2;//^:得到不进位的加法值 unsigned int carry=num1&num2;//&:得到进位carry原创 2022-04-28 00:40:08 · 264 阅读 · 0 评论 -
AcWing 81. 扑克牌的顺子(C++)- 模拟
题目链接:https://www.acwing.com/problem/content/description/77/题目如下:class Solution {public: bool isContinuous( vector<int> numbers ) { if(numbers.size()==0) return false; unordered_set<int> uset; int big=INT原创 2022-04-27 01:10:36 · 1146 阅读 · 0 评论 -
AcWing 75. 和为S的两个数字(C++)- unordered_map、map、哈希
题目链接:https://www.acwing.com/problem/content/description/71/题目如下:class Solution {public: vector<int> findNumbersWithSum(vector<int>& nums, int target) { unordered_map<int,int> umap; for(int i=0;i<nums.size();原创 2022-04-21 15:04:48 · 241 阅读 · 0 评论 -
AcWing 77. 翻转单词顺序(C++)- 字符串处理、操作分解、双指针
题目链接:https://www.acwing.com/problem/content/73/题目如下:class Solution {public: string reverseWords(string s) { s.erase(0,s.find_first_not_of(' ')); s.erase(s.find_last_not_of(' ')+1); //思路:先整体反转,再单个反转;或先单个反转,再整体反转 rever原创 2022-04-21 14:54:34 · 528 阅读 · 0 评论 -
AcWing 84. 求1+2+…+n(C++)- 类、递归、条件表达式
题目链接:https://www.acwing.com/problem/content/description/80/题目如下:class Solution {public: int getSum(int n) { if(n==1) return n; n+=getSum(n-1); return n; }};原创 2022-04-21 11:02:15 · 502 阅读 · 0 评论 -
AcWing 87. 把字符串转换成整数(C++)- 字符串处理、模拟
题目链接:https://www.acwing.com/problem/content/83/题目如下:class Solution {public: int strToInt(string str) { str.erase(0,str.find_first_not_of(' ')); int maxval=INT32_MAX; int minval=INT32_MIN; long res=0;原创 2022-04-21 00:11:37 · 519 阅读 · 0 评论 -
AcWing 69. 数组中数值和下标相等的元素(C++)- 二分
题目链接:https://www.acwing.com/problem/content/65/题目如下:class Solution {public: int getNumberSameAsIndex(vector<int>& nums) { int low=0,high=nums.size()-1; while(low<=high){ int mid=low+(high-mid)/2;原创 2022-04-20 23:25:57 · 253 阅读 · 0 评论 -
AcWing 68. 0到n-1中缺失的数字(C++)- 二分
题目链接:https://www.acwing.com/problem/content/description/64/题目如下:class Solution {public: int getMissingNumber(vector<int>& nums) { //用等比数列求和公式,先求出总和,在用O(n)的时间复杂度,减去每个元素 int n=nums.size(); int sum=n*(n+1)/2;原创 2022-04-20 21:17:36 · 251 阅读 · 0 评论 -
AcWing 88. 树中两个结点的最低公共祖先(C++)- 二叉树、递归、最近公共祖先
题目链接:https://www.acwing.com/problem/content/84/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2022-04-09 23:16:02 · 500 阅读 · 0 评论 -
AcWing 70. 二叉搜索树的第k个结点(C++)- 二叉搜索树、递归、分治
题目链接:https://www.acwing.com/problem/content/description/66/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2022-03-28 00:51:50 · 583 阅读 · 0 评论 -
AcWing 72. 平衡二叉树(C++)- 二叉树、递归
题目链接:https://www.acwing.com/problem/content/68/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2022-03-27 20:46:23 · 661 阅读 · 0 评论 -
AcWing 71. 二叉树的深度(C++)- 树的遍历、递归
题目链接:https://www.acwing.com/problem/content/67/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2022-03-27 20:40:47 · 669 阅读 · 0 评论 -
AcWing 61. 最长不含重复字符的子字符串(C++)- 双指针、滑动窗口
题目链接:https://www.acwing.com/problem/content/description/57/题目如下:class Solution {public: int longestSubstringWithoutDuplication(string s) { //carl哥的滑动窗口思想 //通过umap来判断是否已出现重复字符 int res=INT_MIN; unordered_map<char,in原创 2022-03-10 01:53:59 · 227 阅读 · 0 评论 -
AcWing 62. 丑数(C++)- 多路归并
题目链接:https://www.acwing.com/problem/content/description/58/题目如下:class Solution {public: int getUglyNumber(int n) { //定义数组dp,其中dp[i]表示第i个丑数,且dp[1]=1 //定义三个指针p2 p3 p5,表示下一个丑数是当前指针指向的丑数×对应的质因数的下标,初始值均为1 int dp[n+1]; dp[原创 2022-03-10 00:49:06 · 316 阅读 · 0 评论 -
AcWing 64. 字符流中第一个只出现一次的字符(C++)- 哈希
题目链接:https://www.acwing.com/problem/content/description/60/题目如下:class Solution{public: unordered_map<char,int> umap; vector<char> vtr; //Insert one char from stringstream void insert(char ch){ vtr.push_back(ch);原创 2022-03-08 21:44:19 · 169 阅读 · 0 评论 -
AcWing 63. 字符串中第一个只出现一次的字符(C++)- 哈希
题目链接:https://www.acwing.com/problem/content/description/59/题目如下:class Solution {public: char firstNotRepeatingChar(string s) { unordered_map<char,int> umap;//注意:无序的哈希 for(auto e:s) umap[e]++; for(auto原创 2022-03-08 21:28:56 · 68 阅读 · 0 评论 -
AcWing 65. 数组中的逆序对(C++)- 归并排序
题目链接:https://www.acwing.com/problem/content/61/题目如下:class Solution {public: int inversePairs(vector<int>& nums) { return merge(nums,0,nums.size()-1); } int merge(vector<int>& nums,int l,int r){//返回值是逆序对的个数原创 2022-03-08 21:06:30 · 414 阅读 · 0 评论 -
AcWing 66. 两个链表的第一个公共结点(C++)- 链表
题目链接:https://www.acwing.com/problem/content/description/62/题目如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: L原创 2022-03-07 23:00:29 · 217 阅读 · 0 评论 -
AcWing 67. 数字在排序数组中出现的次数(C++)- 二分
题目链接:https://www.acwing.com/problem/content/63/题目如下:class Solution {public: int getNumberOfK(vector<int>& nums , int k) { //查找第一个和查找最后一个等于给定值的元素 //前提:数组中的元素是有序的 int left=-1,right=-1; //查找第一个 int low原创 2022-03-07 22:42:50 · 126 阅读 · 0 评论 -
AcWing 51. 数字排列(C++)- 递归、dfs
题目链接:https://www.acwing.com/problem/content/description/47/题目如下:class Solution {public: vector<int> path; vector<vector<int>> result; vector<vector<int>> permutation(vector<int>& nums) { resul原创 2022-03-07 21:10:51 · 124 阅读 · 0 评论 -
AcWing 52. 数组中出现次数超过一半的数字(C++)- 摩尔投票法
题目链接:https://www.acwing.com/problem/content/description/48/题目如下:class Solution {public: int moreThanHalfNum_Solution(vector<int>& nums) { //摩尔投票法:如果一个数大于一半,则这个数最后的数量一定会大于其他所有数的数量之和 int cnt=1,val=nums[0]; f原创 2022-03-03 23:10:54 · 393 阅读 · 0 评论 -
AcWing 53. 最小的k个数(C++)- 堆、priority_queue
题目链接:https://www.acwing.com/problem/content/description/49/题目如下:class Solution {public: vector<int> getLeastNumbers_Solution(vector<int> input, int k) { priority_queue<int> que; //priority_queue为大顶堆,如果要求小顶堆,则reverse一下即可原创 2022-03-03 22:39:33 · 378 阅读 · 0 评论 -
AcWing 55. 连续子数组的最大和(C++)- 贪心、动态规划
题目链接:https://www.acwing.com/problem/content/description/50/题目如下://解一:class Solution {public: int maxSubArray(vector<int>& nums) { int res=INT_MIN; int s=0; for(auto e:nums){ if(s<0) s=0;//s记录的是到当前位置原创 2022-03-03 10:19:46 · 331 阅读 · 0 评论 -
AcWing 49. 二叉搜索树与双向链表(C++)- 二叉搜索树、双向链表
题目链接:https://www.acwing.com/problem/content/87/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2021-11-20 22:00:03 · 315 阅读 · 0 评论 -
AcWing 48. 复杂链表的复刻(C++)- 链表
题目链接:https://www.acwing.com/problem/content/description/89/题目如下:/** * Definition for singly-linked list with a random pointer. * struct ListNode { * int val; * ListNode *next, *random; * ListNode(int x) : val(x), next(NULL), random(NULL原创 2021-11-15 21:55:44 · 775 阅读 · 0 评论 -
AcWing 47. 二叉树中和为某一值的路径(C++)- dfs
题目链接:https://www.acwing.com/problem/content/description/45/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2021-11-13 22:14:12 · 746 阅读 · 0 评论 -
AcWing 46. 二叉搜索树的后序遍历序列(C++)- 二叉搜索树遍历
题目链接:https://www.acwing.com/problem/content/description/44/题目如下:class Solution {public: vector<int> seq; bool verifySequenceOfBST(vector<int> sequence) { //直接从二叉树的后序遍历构造树,构造不出来则返回false //后序遍历的顺序:左右根,即最后一个元素原创 2021-11-11 21:51:08 · 531 阅读 · 0 评论 -
AcWing 45. 之字形打印二叉树(C++)- BFS
题目链接:https://www.acwing.com/problem/content/43/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2021-11-10 21:49:02 · 63 阅读 · 0 评论 -
AcWing 44. 分行从上往下打印二叉树(C++)- BFS
题目链接:https://www.acwing.com/problem/content/description/42/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *原创 2021-11-10 21:29:37 · 66 阅读 · 0 评论 -
AcWing 43. 不分行从上往下打印二叉树(C++)- BFS
题目链接:https://www.acwing.com/problem/content/41/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2021-11-10 21:16:03 · 70 阅读 · 0 评论 -
AcWing 42. 栈的压入、弹出序列(C++)- 栈、模拟
题目链接:https://www.acwing.com/problem/content/description/40/题目如下:class Solution {public: bool isPopOrder(vector<int> pushV,vector<int> popV) { //两种情况的特判 if(pushV.size()==0&&popV.size()==0) return true; if(原创 2021-11-10 21:05:27 · 65 阅读 · 0 评论 -
AcWing 41. 包含min函数的栈(C++)- 单调栈
题目链接:https://www.acwing.com/problem/content/description/90/题目如下:class MinStack {public: /** initialize your data structure here. */ stack<int> stk,minstk; MinStack() { minstk.push(INT_MAX);//目标:每次minstk的栈顶都是最小元素 }原创 2021-11-09 20:40:03 · 85 阅读 · 0 评论 -
AcWing 40. 顺时针打印矩阵(C++)- 模拟、vector
题目链接:https://www.acwing.com/problem/content/description/39/题目如下:class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> result; if(matrix.size()==0) return result;原创 2021-11-09 19:27:11 · 102 阅读 · 0 评论 -
AcWing 39. 对称的二叉树(C++)- 二叉树
题目链接:https://www.acwing.com/problem/content/38/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2021-11-08 21:06:43 · 245 阅读 · 0 评论 -
AcWing 38. 二叉树的镜像(C++)- 二叉树
题目链接:https://www.acwing.com/problem/content/37/题目如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2021-11-06 22:51:00 · 77 阅读 · 0 评论