剑指offer刷题
Shymeleaf
这个作者很懒,什么都没留下…
展开
-
剑指Offer刷题-一般的题
一般的题从尾到到尾打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路方式1.借助栈存储节点,然后实现从后向前输出;或是借助vector以及它的reverse方法方式2.递归方式,参考树的前中后序遍历的递归,先访问后面的节点,在访问当前的节点,再把当前的结果集res返回给上层调用,让上层放入上层访问的节点。/*** struct ListNode {* int val;* struct ListNode *next;*原创 2020-08-04 16:44:02 · 80 阅读 · 0 评论 -
剑指Offer刷题-双指针
和为S的两个数字题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路数组是递增排序的。class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { // 双指针问题 // 重点:升序排列 + 两个数乘积最小 ===> 从两边向中间移动双原创 2020-08-03 23:01:09 · 234 阅读 · 0 评论 -
剑指Offer刷题-字符串处理/搜索
表示数值的字符串题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。class Solution {public: bool isNumeric(char* string) { // 1.先判断是否含有e E 返回其所在的位置 int i=0;原创 2020-08-03 22:58:20 · 91 阅读 · 0 评论 -
剑指Offer刷题-跟查找有关的题目
4.数据流中的中位数题目描述如何得到一个数据流中的中位数?思路1)每次插入数据,然后取中位数的时候排序,然后再取中位数;2)每次插入数据使用插入排序,这样维护的数组就是一个递增的数组;之后可以直接取中位数;3)最大堆维护较大的数,最小堆维护较小的数,每次插入保证最大堆和最小堆的元素个数差不超过1;// 方法1.直接插入,排序取中位数class Solution {public: vector<int> v; void Insert(int num) {原创 2020-08-03 22:57:06 · 77 阅读 · 0 评论 -
剑指Offer刷题-动态规划
4.青蛙跳台阶II题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路设跳上第i级台阶的方法数为f[i]【结论1】则f[i] = f[i-1]+ f[i-2] + … + f[0]f[i-1] 从i-1级跨1步到i级台阶f[i-2] 从i-2级跨2步到i级台阶…f[0] 从0级跨i步到i级台阶【结论2】又有f[i-1] = f[i-2]+…+f[0], 所以有 f[i] = 2*f[i-1]f[1] = 1;原创 2020-08-03 22:56:59 · 104 阅读 · 0 评论 -
string接口、queue等数据结构函数的使用
队列queue优先队列最大堆priority_queue<int, vector, greater> max_q;字符串stringstr.substr(start_pos, end_pos) ;原创 2020-08-03 22:56:24 · 139 阅读 · 0 评论 -
剑指Offer刷题-一些水题
一些水题:1.构建乘积数组题目描述:给定数组A[0,1,…,n-1]构建数组B[0,1,…,n-1]B[i]=A[0]×A[1]×A[2]×…×A[i-1]×A[i+1]×A[i+2]×…×A[n-1]规定:B[0] = A[1]×A[2]×…×A[n-1]B[n-1] = A[0]×A[1]×A[2]×…×A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。不能使用除法。思路:因为不能使用除法,所以选择保存数组A的前缀积和后缀积。代码class原创 2020-08-03 19:48:34 · 83 阅读 · 0 评论 -
剑指Offer刷题-技巧题/规律总结题
技巧题1.不用加减乘除做加法题目描述:求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:1.将num1和num2表示二进制的形式便于观察2.使用 “异或运算” 求 num1和num2 每一位上【不带进位】的和3.使用 “与运算” 求 num1和num2 每一位上【向 前一位】的进位只有当前位是两个1相加,才会出现进位,因此用“与运算”比如:从低位开始算起,num1的第1位是1,num2的第一位也是1,它们相加得到的进位是1,这个1是要加在第2位上面的 ,因此得到的原创 2020-08-03 19:47:44 · 344 阅读 · 0 评论 -
剑指offer刷题-与数据结构相关的题目
常规题/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int TreeDepth(TreeNode* pRoot) { int res = 0; if(pRoot==NULL)r原创 2020-08-03 19:46:56 · 93 阅读 · 0 评论 -
剑指Offer刷题-一些必须要会的知识点
一些必须要会的知识点:树的遍历-递归-非递归-前序中序后序层序前序遍历-非递归(栈)// 方式一void preOrder(treenode *root) { if (root) { stack<treenode *> st; // 借助 栈 结构进行前序遍历 treenode *r =root; while (!st.empty()||r) { // 当栈不为空或树根不为空进入循环 while (r) { // 这里循环遍历每棵左子树的根节点原创 2020-08-03 19:45:59 · 215 阅读 · 0 评论