![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
_YKitty
这个作者很懒,什么都没留下…
展开
-
剑指offer| |二维数组中的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:可以从右上角进行出发比较,因为对于右上角的数字,其左边的的数字均比其小,下面的数字均比其大代码:#include <stdio.h>int FindNumInAr...原创 2018-08-14 16:38:00 · 148 阅读 · 0 评论 -
剑指offer| |顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如: 如果输入以下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。可以将这个矩阵看成一...原创 2018-09-01 16:09:36 · 219 阅读 · 0 评论 -
剑指offer| |二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false。假设输入的数组任意两个数字都互不相同。思想; 首先要知道二叉搜索树的特点,然后再来进行判断,对于二叉搜索树其本质也是一个二叉树,只不过对于其一个结点,其左子树均小于该结点,右子树均大于该结点。然后后序遍历的话,那么最后一个结点必定是该二叉搜索树的根节点,如图: 对...原创 2018-09-05 17:31:18 · 143 阅读 · 0 评论 -
剑指offer| |二叉树中和为某一直的路径
题目:输入一个二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径,从树的根节点开始往下一直到叶节点所经过的结点形成一条路径。代码://和为某一值的路径//传的是栈的值,所以在函数里面不会改变栈内的值void FindPath(BTNode* root, int num, Stack s1, int count){ assert(root); Stack...原创 2018-09-05 23:13:57 · 139 阅读 · 0 评论 -
剑指offer| |重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不重复的数字。假如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如图的二叉树: ...原创 2018-09-09 22:52:11 · 172 阅读 · 0 评论 -
剑指offer| |字符串的排列
题目: 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出字符串a,b,c所能排列出来的所有字符abc,acb,bac, bca, cab和cba.原创 2018-09-12 16:00:53 · 136 阅读 · 0 评论 -
剑指offer| |丑数
题目:我们把只包含因子2、3和5的数称为丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数。方法一:思路:逐个判断每个整数是不是丑数依次从1开始判断每个数是不是丑数,从而求出第1500个丑数,这种方法思路简单但是不够高效。代码://是丑数 1//不是 0int CheckUglyNumber...原创 2018-09-23 11:29:24 · 182 阅读 · 0 评论 -
剑指offer| |数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{ 1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.思路1:时间复杂度O(N)遍历一遍数组即可得到一个数字出现的次数代码:int GetNumCount(int* arr, int sz, int num){ assert(arr); int count = 0; for (int i ...原创 2018-09-19 00:00:39 · 119 阅读 · 0 评论 -
剑指offer| |数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超出数组长度的一半,因此输出2。思路:可以采用两个变量一个记录当前的数字result,另外一个记录次数count。 如果count为零的话,那就将当前的数据赋值给result并且count++ 如果result等于当前的数据的话...原创 2018-09-13 22:34:20 · 148 阅读 · 0 评论 -
剑指offer| |树的子结构
题目:输入两个二叉树A和B,判断A是不是B的子结构。 如图下面这颗树就是上面的树的子结构。 思路:要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和B的根节点的值一样的结点R,第二步在判断树A中以R为根节点的子树是不是包含和树B一样的结构。第一步在树A中找与树B根节点的值一样的结点,这实际上就是树的遍历。 第二步是判断树A中以R为根节点的子树...原创 2018-09-03 23:22:39 · 112 阅读 · 0 评论 -
剑指offer| |链表中倒数第k个结点
题目:输入一个链表,输出该链表的倒数第k个结点。为了符合大多数人的习惯,即链表的尾结点是倒数第一个节点。例,如链表有6个节点,从头结点开始他们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。思路:定义两个指针。第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始走,当第一个指针走到尾结点是,第二个指针刚好...原创 2018-09-05 17:06:01 · 113 阅读 · 0 评论 -
剑指offer| |替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:方法一:开辟一个新的数组来存放新的字符串代码:#include <stdio.h>#include <assert.h>char newStr[100] = { 0 };cha...原创 2018-08-15 22:31:17 · 153 阅读 · 0 评论 -
剑指offer| |旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:采用二分查找,每一次求得的mid只要arr[mid]大于第一个元素,说明该中间元素,还是在前面的递增...原创 2018-08-15 22:58:14 · 183 阅读 · 0 评论 -
剑指offer| |二进制中1的个数(及其扩展)
题目描述:二进制中1的个数三种解法; 代码://采用计算二进制的1int Number_1(unsigned int num){ int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num ...原创 2018-08-26 23:39:29 · 120 阅读 · 0 评论 -
剑指offer| |链表中倒数第k个结点
题目描述:输入一个链表,输出该链表中倒数第k个结点。 由于本人所做的题均用c语言所写。所以该题要做的话就要定义数据结构,创建链表等等。所以讲解一下思想: 这道题;可以使用两个指针,一个快指针,一个慢指针,对于快指针,让其先走k - 1步,然后两个指针在一起走,直到快指针到达尾部,则慢指针指向链表的倒数第k个结点。我写的链表的面试题的博客里面有这道题:所以给大家一个链接看看: 链接:h...原创 2018-08-27 00:00:59 · 119 阅读 · 0 评论 -
剑指offer| |数值的整数次方
题目描述:实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。//进行浮点数判断是不是等于0bool equal(double num1, double num2){ if (num1 - num2 > -0.0000001 && num1 - num...原创 2018-08-28 17:51:51 · 169 阅读 · 0 评论 -
剑指offer| |打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n为十进制数。比如输入3,则打印出1,2,3一直到最大的三位数即999。 思路:这道题一看就是一个大数问题。对于解决这个大数的问题,可以用到字符串或者数组都可以。字符串解法:对于一个字符串的话, 首先要考虑申请空间的时候,要申请n+1个因为最后还有一个’\0’ 进行加法时从最后一位进行加法 判断是否溢出,可采用看是否到第一位了并要进...原创 2018-08-31 14:43:05 · 157 阅读 · 0 评论 -
剑指offer| |在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。思路:对于该题可以采用替换删除法。 对于链表有多个结点: 即要删除该结点的可以将其后面的结点的数据域给该结点,然后删除后面的结点。 这个方法有一个bug那就是比如要删除的结点是尾结点的话,那么其后面就没有结点可供让其替换删除的了,所以对于删除尾结点的话,还是采用遍历到该结点的前一节点然后再进行删除即可。 链...原创 2018-09-05 17:05:18 · 112 阅读 · 0 评论 -
剑指offer| |调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整数组中数字的顺序,是的所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。 思路:我们可以维护两个指针,第一个指针初始化指向数组的第一个数字,他只想后移动;第二个指针初始化指向数组的最后一个数字,他只向前移动。在这两个指针相遇之前,第一个指针总是位于第二个指针的前面,如果第一个指针指向的是偶数,第二个指针指向的是奇数,我们就交换着两个数字。...原创 2018-09-05 17:05:51 · 105 阅读 · 0 评论 -
剑指offer| |数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{ 1,2,3,3,3,3,4,5}和数字3,。由于3在这个数组中出现了4次,因此输出4方法一:时间复杂度为O(N)思路:直接把数组遍历一遍即可,简单粗暴代码:int GetNumCount(int* arr, int sz, int key){ assert(arr); int count = 0; for (int i...原创 2018-09-24 11:03:23 · 147 阅读 · 0 评论