《剑指offer》题解
就是写写题解,参考《剑指offer》,参考b站大雪菜,并且结合自己的见解
pessiboy
头号混子,会点C++,会点python,会点java。
展开
-
剑指 Offer 58 - II. 左旋转字符串
我也不知道说啥,有手就行class Solution {public: string reverseLeftWords(string s, int n) { string res=""; if(!s.size()) return res; else{ string tmp=s.substr(0,n); for(int i=n;i<s.size();i++) res+=s[i]; .原创 2020-12-04 15:59:50 · 65 阅读 · 0 评论 -
《剑指 Offer》64. 求1+2+…+n
其实这道题目,我并不是去说难。而是最近碰到的一个问题,算是真正碰到这个知识点:C++短路运算最近靠这个碰到很多操蛋的事情,其实我一直觉得这没有什么用,就是使用不到这个小技巧:我先把这道题目的代码给贴出来叭:代码如下class Solution {public: int sumNums(int n) { //今天刚好学到了短路表达式 int res=n; (n>0)&&(res+=sumNums(n-1)); .原创 2020-10-29 15:58:23 · 54 阅读 · 0 评论 -
《剑指offer》-53 - II. 0~n-1中缺失的数字
class Solution {public: int missingNumber(vector<int>& nums) { for(int i=0;i<nums.size();i++){ if(i!=nums[i]) return i; } return nums.size(); }};原创 2020-10-26 10:50:12 · 64 阅读 · 0 评论 -
《剑指offer》-55 - I. 二叉树的深度
递归操作取一个最大值:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int maxDepth(TreeN.原创 2020-10-26 10:25:55 · 46 阅读 · 0 评论 -
《剑指offer》-57. 和为s的两个数字
就是leetcode的two sum问题,这里应该算是有三种方法:双指针,二分查找(二分不一定需要你去写一个二分,直接用binary_search()就可以了),哈希表class Solution {public: //vector<int> ans; vector<int> twoSum(vector<int>& nums, int target) { //两种方法吧,第一种就是直接暴力搞 //第二种就是使用.原创 2020-10-26 10:22:25 · 54 阅读 · 0 评论 -
《剑指offer》-39 数组中出现次数超过一半的数字
额,实在没什么讲的,数学使用:排序之后,选出中位数就可以了,自己可以用纸写一下。class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); return nums[nums.size()/2]; }};...原创 2020-10-26 10:06:40 · 48 阅读 · 0 评论 -
《剑指 Offer 40》-最小的k个数
分析:快排一下,然后选取出区间的数字叭。如果模板不会,翻一下菜鸟教程,或者stackoverflow。代码如下:class Solution {public: vector<int> res; vector<int> getLeastNumbers(vector<int>& arr, int k) { sort(arr.begin(),arr.end()); for(int i=0;i<k;i++) .原创 2020-10-26 10:03:59 · 52 阅读 · 0 评论 -
《剑指 Offer》32 - III. 从上到下打印二叉树 III
分析:从题目看其实还是层序遍历, 肯定首选的方法肯定还是bfs。1.现在我们在明确一下题目的导向,我们还是希望按照层序去算法设计。bfs是找到一个点附近的所有的点,那么对应到树中,那么久所有的左右的子节点,也就是下一层。2.那么我们当前的任务是维护每一层的节点即可了。3.然后按照顺序去特别, 对偶数层的点,维护的时候,需要去reverse一下,就可以了。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * .原创 2020-10-26 09:41:15 · 66 阅读 · 0 评论 -
《剑指 Offer》- 32 从上到下打印二叉树 II
有别于之前的题目,之前的题目是,直接按照一维,然后层序遍历输出即可。这里按照层序的层去进行打印输出。思路:还是bfs,但是在bfs的基础上,我们在二维上进行操作,然后定义一个level层,存储每一层的节点,然后压入答案容器中。注意没存储一次level并压入答案队列之后,我们要将level清空一下。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le.原创 2020-10-26 08:59:13 · 43 阅读 · 0 评论 -
《剑指offer》-26 树的子结构
这是我觉得为数不多,基础且需要注意边界的情况。我总结起来就像是,小数长在大树上。B树的根肯定是在在A上面:(1)首先肯定是在同一个点去进行查找,所以一直递归调用自己找到树根(2)递归查找树,1.需要找到一个递归界,B为空时,表示路线走完了,那么return true。2.如果A为空,那么表示找不到,说明没找到子树。return false。3.如果书系欸但/** * Definition for a binary tree node. * struct TreeNode { * in原创 2020-10-20 16:14:39 · 48 阅读 · 0 评论 -
《剑指offer》-17 打印从1到最大的n位数
本来是想写一下tranfers函数,转一下的(但是发现很麻烦),结果突然想起来可以使用string的构造函数,然后直接将string转化成int代码如下:class Solution {public: vector<int> res; // int transfer(string str){ // string res=""; // for(int i=0;i<str.size();i++) res+='9'; // .原创 2020-10-20 08:17:59 · 41 阅读 · 0 评论 -
《剑指offer-39 数组中出现次数超过一半的数字
排序,输出中位数。又是一道 爽题 ,不多说直接上代码:class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); int len=nums.size(); return nums[len/2]; }};...原创 2020-10-19 22:15:55 · 43 阅读 · 0 评论 -
《剑指offer》50. 第一个只出现一次的字符
class Solution {public: char firstUniqChar(string s) { vector<int> res(128,0); int i=0,j=0; for(int i=0;i<s.size();i++){ res[s[i]]++; while(res[s[j]]>1) j++; } if(j<s.size.原创 2020-10-19 21:56:42 · 39 阅读 · 0 评论 -
《剑指offer》-减绳子
妈的,有点操蛋,好像力扣上没有。但是acwing和《剑指offer》上面都有。这里稍微说一下:其实第一步并没有想到使用数学的手段去选,但是脑子里的潜意识还是想到了数学。很像是有约束项的拉格朗日数乘法的题目,但是约束的变量太多了。就是求这么一个方程。但是我看的题解报告里面,有比较优秀的证明。证明如下:我截图的,如果觉得很难得话,看一看连接的讲解叭:其实证明还是比较好证明的:(结论:优先选择3,然后优先选择4,在优先选择2)证明如下:假设绳子的长度是n(1)当n>=5时(不要急有人又要.原创 2020-10-19 11:01:59 · 88 阅读 · 0 评论 -
《剑指offer》-15 二进制中1的个数
这里参考一个博客的连接:LeetCode &运算class Solution {public: int hammingWeight(uint32_t n) { //二进制1的位数 // int cnt=0; // while(n!=0){ // n=n&(n-1); // cnt++; // } // return cnt; re.原创 2020-10-19 10:17:55 · 42 阅读 · 0 评论 -
《剑指offer》-55 二叉树的深度
叭讲了,这个就是一个对递归遍历。背一背吧,学树必学。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int.原创 2020-10-13 08:11:58 · 42 阅读 · 0 评论 -
《剑指offer》- 11 旋转数组的最小数字
我们做这一题核心的方向是:找出最小的数(前提条件是:旋转和不旋转的数组)大概分析:直接采用土办法,一开始我缺少一个样例考察。就是降序的情况:给出的旋转数组无非就是三种情况:升序,降序,真正的旋转数组。这是三组样例12345668912457654321class Solution {public: int minArray(vector<int>& numbers) { //用简单的方式,其实没必要把顺序弄出来 int len=.原创 2020-10-12 18:05:32 · 41 阅读 · 0 评论 -
《剑指offer》-07 重建二叉树
就是一个简单的重建二叉树的操作,这里我采用常规的写法,就是稍微递归去进行求解。最基本的写法了。代码如下:在这里插入代码片浙江大学的上机考试pat,考过重新建立二叉树的相关题目,常规的写法,参考《算法笔记》的内容,经济允许的话,可以买一本看看呀。我也参考过柳神和日沉云起大神的代码,我这里稍微去讲解一下。如果分析有不到位的,希望能够见谅。代码如下:在这里插入代码片...原创 2020-10-12 11:34:41 · 43 阅读 · 0 评论 -
《剑指offer》-05 替换空格
碰到空格就进行字符串连接:class Solution {public: string replaceSpace(string s) { string res; for(int i=0;i<s.size();i++){ if(isspace(s[i])) res+="%20"; else res+=s[i]; } return res; }};C++的语言,有模板.原创 2020-10-12 10:37:44 · 49 阅读 · 0 评论