剑指offer刷题
Mona______
好好学习天天向上 o(≧v≦)o
展开
-
剑指 offer —— 刷题笔记
第一题 string中 =操作符重载#CMySring类1 刚开始就遇到一个小问题,可真是bug——关于头文件混淆了 #include"xx.h" 和 #include<xx.h> 的用法#include<xx.h> 表示直接从编译器自带的函数库中寻找文件,编译器从标准库路径开始搜索.xxh#include"xx.h" 表示先从自定义的文件中找 ,如果找不到在从函数库中寻找文件,编译器从用户的工作路径开始搜索 xx.h如果我们通过<>的方式引用自己原创 2021-04-13 16:22:08 · 156 阅读 · 0 评论 -
剑指offer——第51题——数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。class Solution {public: int reversePairs(vector<int>& nums) { return split(nums, 0, nums.size() - 1); }private: // 递归实现 分治 int split(vector<int&g原创 2021-06-02 21:21:32 · 265 阅读 · 0 评论 -
剑指offer——第53-2——缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。class Solution {/*这道题是把数组分成了两类,一类的 nums[i] == i,一类是 nums[i] != i一定是左边相等,右边不相等的情况,因此,就按照这个思路,取right边界 即可也就是找到 第一个 nums[i] != i 对应的下标 right 就是正好缺失的数字*/ public:原创 2021-05-25 23:19:06 · 108 阅读 · 0 评论 -
剑指offer——第53-1题——在排序数组中查找数字
题目:统计一个数字在排序数组中出现的次数。class Solution {/*方法一算是我第二次写,错误的地方就是在while循环里没写 return count导致一直循环出不来,当在 mid == target 之后,满足条件要及时返回啊这个是方法二的主要思想容易想到的方式就是分别用二分查找的方式去查找 target 在数组的左边界和右边界,然后将右边界减左边界即可得到结果分别查找 target 左边界和右边界的逻辑会有差异,这里可以取巧,变成分别查找 target-1 的右边界和原创 2021-05-25 22:33:40 · 60 阅读 · 0 评论 -
剑指offer——第11题——旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。class Solution {/*1、比较的是 numbers[middle] 与 numbers[right],这样便于进行分类和操作2、旋转数组实际上可以划分为两个排序的子数组3、为什么是 right-- 缩小范围,而不是 left++ 因为数组是升序的,所原创 2021-05-25 21:49:41 · 82 阅读 · 0 评论 -
第38题——字符串的排序
题目:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。class Solution {/*错误1:回溯函数的参数传递要 传引用,我忘记了这个,搞成值传递,这样会浪费空间错误2:if 语句判断顺序是很重要的,它会按照写入的顺序进行排序,如果第一个不成立就不会看后面的,所以因为把 i>0 放后面,所以 i-1 会溢出错误3:没有先排序,导致输出结果有重复。没有排序的话,就没办法对相邻元素进行判断*/private: st原创 2021-05-17 17:00:10 · 228 阅读 · 0 评论 -
第27题——二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注原创 2021-04-18 13:01:19 · 105 阅读 · 0 评论 -
第22题——链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.#include#include#include<unordered_map>using namespace原创 2021-04-16 20:04:59 · 76 阅读 · 0 评论 -
第18题——删除链表的节点
题目:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。并返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.#include<iostream>#include<vector>#include<unordered_map>using namespace原创 2021-04-16 12:57:32 · 98 阅读 · 0 评论 -
第五题——从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]#include<iostream>#include<vector>#include<unordered_map>#include<stack>using namespace std; struct ListNode{ int val; ListNode* next; List原创 2021-04-15 23:50:53 · 73 阅读 · 0 评论 -
第四题——替换空格
题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”原创 2021-04-15 23:19:18 · 56 阅读 · 0 评论 -
第三题——二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。...原创 2021-04-15 22:26:15 · 70 阅读 · 0 评论 -
第3题——找出数组中重复的数字
题目:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 ...原创 2021-04-15 21:14:27 · 155 阅读 · 0 评论 -
第1题——赋值运算符函数
面试第一题赋值运算符函数题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print();原创 2021-04-15 19:02:03 · 60 阅读 · 0 评论