剑指offer
文章平均质量分 92
Y_Yl
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 46. 把数字翻译成字符串 c++
剑指 Offer 46. 把数字翻译成字符串写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.动态规划解题步骤class Solution {public: int translateNum(int num) { string s=to_string(num); vector<int>ans; ans.push_back(1);//根据推算得来的,举例子 ans.pus原创 2020-08-24 11:35:25 · 134 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列 c++
剑指 Offer 38. 字符串的排列写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.回溯+set去重 1解题步骤class Solution { unordered_set<string> st;//public: vector<string> permutation(string s) { vector<string> res; if (s.emp原创 2020-08-19 12:19:28 · 176 阅读 · 0 评论 -
剑指Offer58-II.左旋转字符串 c++
剑指Offer58-II.左旋转字符串写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.切片分为a+b,然后输出b+aclass Solution {public: string reverseLeftWords(string s, int n) { string temp; int i=0; while(i<n) temp+=s[i++]; s.erase(0,n);//eras原创 2020-08-20 17:06:47 · 216 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序 c++
剑指 Offer 58 - I. 翻转单词顺序写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.istringstream+栈使用isstringstream输入到栈内,然后定义一个字符串class Solution {public: string reverseWords(string s) { stack<string> stk;//初始化栈 string res,str;//初始化字符串原创 2020-08-18 23:06:07 · 298 阅读 · 0 评论 -
剑指Offer05.替换空格 c++
剑指Offer05.替换空格写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.扩容+倒序遍历+双指针 3首先计算有多少个空格,然后对数组进行扩容,然后反向遍历原数组,判断是空格填入替换,不是的话填入原数组class Solution {public: string replaceSpace(string s) { int l1 = s.length() - 1;//获取字符串长度 for (int i = 0; i &原创 2020-08-18 23:05:32 · 206 阅读 · 0 评论 -
剑指Offer26.树的子结构 c++
剑指Offer26.树的子结构写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.递归和hashmap 1递归和hashmapclass Solution {public: bool isSubStructure(TreeNode* A, TreeNode* B) { bool res = false; //当TreeA和TreeB都不为零的时候,才进行比较。否则直接返回false if (A!=NULL原创 2020-08-18 23:05:07 · 131 阅读 · 0 评论 -
剑指Offer07.重建二叉树 c++
剑指Offer07.重建二叉树写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.递归和hashmap 1递归和hashmapclass Solution {private: unordered_map<int, int> index;public: TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>&原创 2020-08-18 23:03:30 · 166 阅读 · 0 评论 -
236. 二叉树的最近公共祖先 c++
236. 二叉树的最近公共祖先写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.递归 2后序遍历,思路就是递归遍历,首先我们只有两种情况,一种是在同一个子树上,那么我们就返回其中的和p和q想等的那一个值,如果是不在同一子树,那么我们就返回left和right的上一子树class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode*原创 2020-08-18 23:02:36 · 183 阅读 · 0 评论 -
剑指Offer55-II.平衡二叉树 c++
剑指Offer55-II.平衡二叉树写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.深度遍历 4dfs 深度遍历,递归,由底部,后序遍历class Solution {public: bool flag=true; bool isBalanced(TreeNode* root) { dfs(root); return flag; } int dfs(TreeNode *root) {原创 2020-08-18 23:01:54 · 241 阅读 · 0 评论 -
剑指Offer55-I.二叉树的深度 c++
剑指Offer55-I.二叉树的深度写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.迭代BFS 层序遍历class Solution {public: int maxDepth(TreeNode* root) { queue<TreeNode*>q; int n=q.size(),depth=0; if(root==NULL)return NULL; q.push(root原创 2020-08-18 23:01:16 · 138 阅读 · 0 评论 -
235.二叉搜索树的最近公共祖先 c++
剑指 Offer 54. 二叉搜索树的第k大节点写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.set 1使用集合,然后反向迭代class Solution {public://需要定义全局变量写在pubulic这里即可 int kthLargest(TreeNode* root, int k) { set<int>ans; Treefind(root,ans); int j=1;原创 2020-08-18 23:00:02 · 206 阅读 · 0 评论 -
剑指Offer32-III.从上到下打印二叉树III c++
剑指Offer32-III.从上到下打印二叉树III写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.双端队列 3双端队列 从左至右则正常从尾端放入,从前端出队,从右至左,则从前端反向放入,从后端出队class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>>ans原创 2020-08-18 22:56:39 · 196 阅读 · 0 评论 -
剑指Offer32-II.从上到下打印二叉树 II c++
剑指Offer32-II.从上到下打印二叉树 II写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.方法 2算法思路1.在剑指offer32-1的基础上的改进2.改进的地方主要是利用一个数组来存放每一层的数据,再用一个for循环循环输入它们class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { queue<Tre原创 2020-08-17 17:33:23 · 200 阅读 · 0 评论 -
剑指Offer32-I.从上到下打印二叉树 c++
剑指Offer32-I.从上到下打印二叉树1.BFS 队列 层序遍历 1算法流程1.首先初始化队列和一个数组容器。2.送入头指针,看是否为空(特殊情况判断)。3.获取队列的头,打印到容器数组,首元素出队列,先输入左子树,再输入右子树class Solution {public: vector<int> levelOrder(TreeNode* root) { vector<int>ans; queue<TreeNode原创 2020-08-17 17:32:50 · 205 阅读 · 0 评论 -
226.翻转二叉树 c++
226.翻转二叉树写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1.递归 1前序遍历,前序是什么呢,就是根节点在最前面,根左右class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root==NULL) return NULL; //终止条件 swap(root->left,root->right)原创 2020-08-17 17:32:16 · 259 阅读 · 0 评论 -
160相交链表 c++
160相交链表写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 双指针思路就是很简单下面注释class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *a=headA; ListNode *b=headB; int i=0,j=0,gap=0,val原创 2020-08-17 17:31:46 · 142 阅读 · 0 评论 -
21.合并两个有序链表 c++
21.合并两个有序链表写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 迭代思路就是定义一个哨兵节点,然后判断l1和l2哪个小,指向小的,然后小的后移一位,class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* preHead = new ListNode(-1);//定义一个新的节点,prehead指向它,此处保原创 2020-08-17 17:25:18 · 207 阅读 · 0 评论 -
剑指Offer53-I.在排序数组中查找数字I c++
剑指Offer53-I.在排序数组中查找数字I写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 遍历思路就是要把数字的比较转化为字符串的比较,因为明显字符越小放在前面越好,但是有种特例,例如30,3,所以我们把class Solution {public: string minNumber(vector<int>& nums) { vector<string>strs;//定义容器字符串类型原创 2020-08-17 17:24:00 · 164 阅读 · 0 评论 -
剑指Offer45.把数组排成最小的数 c++
剑指Offer45.把数组排成最小的数写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 遍历思路就是要把数字的比较转化为字符串的比较,因为明显字符越小放在前面越好,但是有种特例,例如30,3,所以我们把class Solution {public: string minNumber(vector<int>& nums) { vector<string>strs;//定义容器字符串类型原创 2020-08-17 17:23:25 · 158 阅读 · 0 评论 -
剑指Offer21.调整数组顺序使奇数位于偶数前面 c++
剑指Offer21.调整数组顺序使奇数位于偶数前面写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 遍历1.看到题目第一次解法,定义两个容器,遍历一次,分别存放偶数和奇数,清空原数组,然后拼接数组放入原数组。class Solution {public: vector<int> exchange(vector<int>& nums) { vector<int>odd; vector<in原创 2020-08-17 17:22:58 · 125 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组 c++
剑指Offer66.构建乘积数组写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 双向遍历法1.尝试自己想没想出来于是看答案,方法是两端遍历,分为两段,但是理解错题目了,有点难受。。 int up(int j) { if(j==0||j==1) return 1; return up(j-1)*j; }//尝试自己写了一个阶乘的递归数组,发现虽然很简单,但是自己写感觉也好慢。原创 2020-08-17 17:22:23 · 174 阅读 · 0 评论 -
169. 多数元素 c++实现 6种方法
169.多数元素写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 直接法 pass思路就是找超到过一半的那个数字当然这个对于特殊构造的例子可能不友好,时间复杂度为O(n^2)class Solution {public: int majorityElement(vector<int>& nums) { int n=nums.size(); for (auto i:nums) {原创 2020-08-17 17:21:32 · 510 阅读 · 0 评论 -
154.寻找旋转排序数组中的最小值II c++实现 3种方法
154.寻找旋转排序数组中的最小值II写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 集合法-Set思路就是直接把这个数组放到集合里管它是不是重复,直接输出set第一个值即可,知道这样会导致时间复杂度和空间复杂度都比较高就是随便复习下集合的操作哈哈。class Solution {public: int findMin(vector<int>& nums) { set<int>ans={};//原创 2020-07-23 12:37:50 · 182 阅读 · 0 评论 -
剑指Offer04. 二维数组中的查找 c++实现
剑指Offer04. 二维数组中的查找写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 特殊起始点法思路就是利用从左下或者右上的特殊起始点来查找数组中的数字,从这两个点开始,具有唯一性,class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int row=matri原创 2020-07-22 11:32:35 · 249 阅读 · 0 评论 -
剑指Offer03.数组中重复的数字 c++实现
剑指Offer03.数组中重复的数字写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点1. 使用集合思路就是利用集合不能有重复数字的这个特性,把数组中的元素依次送入集合当中,判断一下这个元素是否被送入,如果已经被送入,那么返回该值,这样得到的是第一个重复的元素class Solution {public: int findRepeatNumber(vector<int>& nums) { set<int>原创 2020-07-16 21:43:25 · 400 阅读 · 0 评论