《剑指Offer》力扣刷题笔记(03-10)

最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷《剑指Offer》、《程序员面试金典》等书上的题目,也为三年之后的校招提前做好准备,是不是有点早。。。
传送门: 剑指 Offer(第 2 版)。全部都是用c++写的。


剑指 Offer 03. 数组中重复的数字

时间复杂度O(n),空间复杂度S(1),要比哈希表还好。

class Solution {public:int findRepeatNumber(vector<int>& nums) {int len=nums.size();for(int i=0;i<len;i++){while(nums[i]!=i){if(nums[i]==nums[nums[i]]){return nums[i];}else{swap(nums[i],nums[nums[i]]);}}}return -1;}
};

剑指 Offer 04. 二维数组中的查找

逐步缩小范围,时间复杂度降到O(n)。

class Solution {public:bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {if(matrix.size()==0||matrix[0].size()==0){return false;}int n=matrix.size();int m=matrix[0].size();int x=0;int y=m-1;while(x<n&&y>=0){if(matrix[x][y]==target){return true;}else if(matrix[x][y]>target){y--;}else if(matrix[x][y]<target){x++;}}return false;}
};

剑指 Offer 05. 替换空格

class Solution {public:string replaceSpace(string s) {int lens=s.size();string t="";string a="%20";for(int i=0;i<lens;i++){if(s[i]!=' '){t+=s[i];}else{t+=a;}}return t;}
};

剑指 Offer 06. 从尾到头打印链表

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:vector<int> reversePrint(ListNode* head) {vector<int> res;if(head==NULL){return res;}ListNode *p=head;while(p!=NULL){res.push_back(p->val);p=p->next;}reverse(res.begin(),res.end());return res;}
};

剑指 Offer 07. 重建二叉树

传参麻烦一点,一种好方法是定义成员变量,我比较懒,就不改了吧。

/*** 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:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.size()==0||inorder.size()==0){return NULL;}TreeNode* root=new TreeNode(preorder[0]);create(root,preorder,inorder,0,0,inorder.size()-1);return root;}void create(TreeNode *t,vector<int>& preorder, vector<int>& inorder,int x1,int x2,int y2){int pos=0;while(preorder[x1]!=inorder[pos]){pos++;}int len1=pos-x2;int len2=y2-pos;if(len1>0){t->left=new TreeNode(preorder[x1+1]);create(t->left,preorder,inorder,x1+1,x2,pos-1);}if(len2>0){t->right=new TreeNode(preorder[x1+len1+1]);create(t->right,preorder,inorder,x1+len1+1,pos+1,y2);}}};

剑指 Offer 09. 用两个栈实现队列

有种豁然开朗的感觉,不禁感叹还有这种操作,骚是骚了点。。

class CQueue {public:stack<int> s1;stack<int> s2;CQueue() {}void appendTail(int value) {s1.push(value);}int deleteHead() {int res=-1;if(!s2.empty()){res=s2.top();s2.pop();}else{while(!s1.empty()){int num=s1.top();s1.pop();s2.push(num);}if(!s2.empty()){res=s2.top();s2.pop();}}return res;}
};/*** Your CQueue object will be instantiated and called as such:* CQueue* obj = new CQueue();* obj->appendTail(value);* int param_2 = obj->deleteHead();*/

剑指 Offer 10- I. 斐波那契数列

空间复杂度为S(1)的解法,来回倒腾,简单实用。书中还提供了一种矩阵快速幂的解法,之前也接触过,感觉有点曲高和寡了。

class Solution {public:const int mod=1e9+7;int fib(int n) {int a,b,c;a=0;b=1;for(int i=2;i<=n;i++){c=(a+b)%mod;a=b;b=c;}if(n==0){return 0;}else if(n==1){return 1;}else{return c;}}
};

剑指 Offer 10- II. 青蛙跳台阶问题

第一次接触dp的时候就是做的这道题,印象深刻。

class Solution {public:const int mod=1e9+7;int numWays(int n) {int a,b,c;a=1;b=2;for(int i=3;i<=n;i++){c=(a+b)%mod;a=b;b=c;}if(n==1||n==0){return 1;}else if(n==2){return 2;}else{return c;}}
};

总结

这一期就这样了,都是一些入门题,但是背后的一些知识点还是很有意思的,后面也是10个1组这样记录吧。

《剑指Offer》力扣刷题笔记(03-10)相关推荐

  1. 《剑指 Offer I》刷题笔记 1 ~10 题

    <剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...

  2. 《剑指 Offer I》刷题笔记 51 ~ 61 题

    <剑指 Offer I>刷题笔记 51_60 位运算(简单) 51. 二进制中 1 的个数 _解法1:逐伟判断 解法2:巧用 n&(n-1) 52. 不用加减乘除做加法(背题) 解 ...

  3. 《剑指 Offer I》刷题笔记 41 ~ 50 题

    <剑指 Offer I>刷题笔记 41_50 排序(中等) 41. 最小的k个数# _解法1:排序 API + 数组复制 API 42. 数据流中的中位数 _解法1:暴力 搜索和回溯算法( ...

  4. 《剑指 Offer I》刷题笔记 20 ~ 30 题

    <剑指 Offer I>刷题笔记 20_30 动态规划(简单) 20. 斐波那契数列 _解法1:迭代 解法2:记忆化递归 解法3:动态规划 21. 青蛙跳台阶问题 _解法1:动态规划 22 ...

  5. 《剑指 Offer I》刷题笔记 11 ~ 19 题

    <剑指 Offer I>刷题笔记 11 ~ 19 题 查找算法(中等) 11. 二维数组中的查找 _解法 1:暴力迭代 解法 2:标志数 解法 3:逐行二分 12. 旋转数组的最小数字 _ ...

  6. 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)

    <剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...

  7. 力扣刷题笔记--168. Excel表列名称

    题目描述: 简单题 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称. 例如: A -> 1 B -> 2 C -> 3 ... Z -> 2 ...

  8. 【剑指offer】leetcode刷题 -- Python3实现 -- 共75题(更新中)

    目录: 1. 剑指 Offer 03. 数组中重复的数字 -- 简单2. 剑指 Offer 04. 二维数组中的查找 -- 简单3. 剑指 Offer 05. 替换空格 -- 简单4. 剑指 Offe ...

  9. 【力扣刷题笔记】初级算法

    初级算法 数组 1.删除排序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 ...

最新文章

  1. 机器学习中算法的性能评估
  2. 隐马尔科夫模型(HMM)解释 和 前向与后向算法[转] 讲解通俗易懂 赞
  3. 浏览器直接连接mysql_在IE中直接连接SQL数据库_MySQL
  4. buuctf 基础破解
  5. 一站式金融云托管服务 都匀融通村镇银行系统成功上线运行
  6. find_first_of和find函数的区别
  7. Sqoop2开启Kerberos安全模式
  8. nginx基础概念(100%)之pipe
  9. 蓝桥杯 BASIC-22 基础练习 FJ的字符串
  10. myeclipse 10激活,本人已测试过可行
  11. 计算机杀毒软件的功能,PC Hunter64(手工杀毒软件)的详细功能介绍
  12. 北京邮电大学计算机院专业录取分数线,2017年北京邮电大学计算机科学与技术专业在北京录取分数线...
  13. 用代码实现通过人人网的登录
  14. XML实现异构数据库间转换的实现与分析
  15. 飞马哥:正确推广模式框架的解析
  16. 判断浏览器必须是IE10以上,低于IE10做出提示
  17. spring 调用python_引用spring
  18. 【银河麒麟V10】【服务器】搭建本地镜像源
  19. sql的简单的增删改查
  20. 如何编译DD-WRT

热门文章

  1. java反序列化成object_java 反序列化输出 object获取为空的问题
  2. 网络基础3【网络层、数据链路层】
  3. 区块链从入门到精通 - 区块链培训
  4. vue项目中引入.xlsx文件
  5. 排列组合Cnm的计算公式
  6. 是否有唯一的 Android 设备 ID?
  7. java 队列线程池_Java线程池Executor使用
  8. CHIP-seq流程学习笔记(13)-ATAC_seq 数据加工处理
  9. 「C++小游戏教程」基本技巧(1)——随机化
  10. 【网络】为什么百度查到的ip和ipconfig查到的不一样;详解公网Ip和私网ip;详解网络分类ABC;