![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
一只帅气的小菜鸡
这个作者很懒,什么都没留下…
展开
-
剑指offer——12.矩阵中的路径(不熟)
题目:题1:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。知识点:回溯法:非常适合由多个步骤组成的问题,并且每个步骤都有多个选项;通常回溯法算法适合用递归实现代码实现:public static ...原创 2019-12-11 15:56:59 · 103 阅读 · 0 评论 -
剑指offer——11.旋转数组的最小数字
题目:题1:实现快速排序题2:年龄排序问题。题3:旋转数组的最小数字知识点:快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details/82423852 创建指定大小的数组(居然忘了,笨噢!):int[] timesofAge = new int [100]; arr1 = [1,2,3,4,5,6]; 对应出现次数a...原创 2019-12-10 11:41:30 · 92 阅读 · 0 评论 -
剑指offer——10.斐波那契数列
题目:题1:现在要求输入一个整数n,请你输出斐波那契数列的第n项。题2:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题3:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题4:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n...原创 2019-12-09 19:47:08 · 85 阅读 · 0 评论 -
剑指offer——9.用两个栈实现队列
题目:题1:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题2:用两个队列来实现一个栈,完成栈的add和remove操作。 栈中的元素为int类型知识点:队列的基本知识,创建空队列、add、remove、isempty等; 栈的基本知识,创建空栈、pop、empty、push等; 参考:https://blog.csdn.net/qq_421...原创 2019-11-24 11:42:58 · 108 阅读 · 0 评论 -
剑指offer——8.二叉树的下一个节点
题目:题:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。知识点:树的基本知识,节点的2个属性(value、right、left、parent); while的使用情景:当遇到循环至某一个条件,再进行操作,判断循环条件设置成对立面。例子见代码注意:该代码若输入为最后一个节点时,输出的结果不正确...原创 2019-11-24 10:16:05 · 86 阅读 · 0 评论 -
剑指offer——7.重建二叉树
题目:题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。知识点:树的基本知识,value、左右子节点;注意:无代码实现:递归思想(暂时没有彻底理解,背写!!!)public cl...原创 2019-11-22 15:59:30 · 84 阅读 · 0 评论 -
剑指offer——6.从尾到头打印链表
题目:题:输入一个链表的头节点,从尾到头打印链表每个节点的值知识点:链表的基本知识,节点的2个属性(value、next); 栈的基本使用:创建空栈、pop、empty、push等;参考:https://blog.csdn.net/qq_42124842/article/details/91420306 递归的本质:栈结构,将复杂的问题分成小问题去解决;参考:https://blo...原创 2019-11-21 20:53:44 · 83 阅读 · 0 评论 -
剑指offer——5.替换空格
题目:题1:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy知识点:字符串是不可迭代的,若想迭代字符串,可以转成字节;判断字符串中有几个' ':str.charAt(i)==‘ ’ 设置stringBuffer中某位的值,str.setCharAt(index, '0')注意:...原创 2019-11-21 20:37:20 · 105 阅读 · 0 评论 -
剑指offer——4.二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。知识点:创建二维数组(居然忘了!)注意:写代码之前,先将输入的范围固定代码实现(java):先将要查找数字num与数组右上的数字进行比较,大于则删除列,小于则删除行,等于输出true/** * 先将...原创 2019-11-05 22:29:16 · 103 阅读 · 0 评论 -
剑指offer——3.实现数组中重复数字查找
知识点:排序一个长度为n的数组需要的时间 变量和属性的区别: 变量是方法体中定义的,我们称为临时变量;属性是类体中定义的。 权限标示符只用于修饰属性和方法。不修饰变量。 方法中定义的临时变量在方法调用完成之后就不存在了,不需要用修饰符定义! 注意:写代码之前,先将输入的范围固定代码实现:先将数组排序,比对数组前后的数值是否相同/** * 题1:找出数组中重复的...原创 2019-11-05 08:58:23 · 101 阅读 · 0 评论 -
剑指offer——2.实现Singleton模式
知识点:进程与线程 volatile关键字:在我们的多线程开发中,我们用Volatile关键字来限定某个变量或者属性时,线程在每次使用变量的时候,都会读取变量修改后的最新的值,即Volatile关键字保证了变量的可见性;https://blog.csdn.net/kris1025/article/details/80008885 java语法中有一个函数能够确保只调用一次,静态...原创 2019-11-02 10:22:21 · 122 阅读 · 0 评论 -
剑指offer——25.合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。知识点:-无注意:以后写代码前要在开头写出特殊的输入情况递归认真考虑好输入和输出代码实现:定义2个指针pHead1、pHead2,依次比较两链表中的值的大小,放入新链表/*合并链表*/ListNode* Merge(ListNode* pHead1, ListNode* pHe...原创 2019-12-22 11:28:30 · 89 阅读 · 0 评论 -
剑指offer——26.树的子结构(不太熟)
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)知识点:无注意:注意想法的递归实现(好好琢磨一下,不然可能会忘!)代码实现:具体实现分两步:1.遍历树1,找到与树2根节点值一样的节点;2进一步判断树1中value一样的节点的子节点是否和树2一致,一致返回,不一致继续遍历/****树的子结构*****//*判断两数是否相等*/...原创 2019-12-23 14:05:41 · 96 阅读 · 0 评论 -
剑指offer——27.二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。知识点:无注意:无代码实现:遍历所有节点,交换当前节点的左右子节点,递归至叶子节点/*二叉树镜像*/void mirror(BinaryTreeNode *pRoot) { //边界值或特殊情况 if (pRoot == nullptr) { return; } //递归至叶子节点(即左右子都为空) if (pR...原创 2019-12-23 19:52:42 · 81 阅读 · 0 评论 -
剑指offer——23.反转链表
题目:输入一个链表,反转链表后,输出新链表的表头。知识点:无注意:改变链表的指针方向的时候,要考虑前中后三个节点分析的时候,要定位到某个节点上具体分析还是考虑的情况要周全,此题的头指针为空、链表长为1啊等等循环条件判断时,一般都按当前节点为空做判决条件吗,下一节点为空不好么?代码实现:定义三个指针,分别指向前中后节点,循环中,当前节点的指向节点改变后,立刻改变前中后节点位置...原创 2019-12-22 10:39:21 · 81 阅读 · 0 评论 -
剑指offer——16.数值的整数次方
题目:实现求base的exponent次方知识点:判断奇数还是偶数,a&1==1;某数除以二,a >>= 1;a>0? res=1:res=2,当满足条件时,选前者否则后者注意:尽量考虑多种情况-代码规范:清晰书写、清晰布局、合理命名代码完整性:功能测试、边界测试、负面测试代码实现:常规方法(全面但不太高效):新思路(利用半半思想):分奇...原创 2019-12-19 22:50:22 · 82 阅读 · 0 评论 -
剑指offer——15.二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数知识点:所有进制数底层都是二进制表示,左位移1位比除二快的多n = n & (n-1),可以依次从左到右一位一位将1转换成0注意:无代码实现:常规方法:定义flag=1,与target的每一位去与,计算结果为1的个数新思路:利用 n = n & (n-1)的特点,递归至n==0int numberOf1(i...原创 2019-12-19 17:18:21 · 88 阅读 · 0 评论 -
快速排序(C++版)
快速排序(C++版)#include <iostream>#include <stdio.h>#include <vector>using namespace std;void quickSort(vector<int> &arr, int left, int right){ //若左边比右边小,立刻退出 if (left...原创 2019-12-17 16:50:20 · 88 阅读 · 0 评论 -
剑指offer——21.调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。知识点:保证相对位置不变,则只能顺次移动或相邻交换注意:无代码实现:定义2个指针i,j,i在数组中从头依次寻找偶数,j寻找i之后最近的奇数,找到后将第j个元素赋值给i,将原i~j-1个元素向后移动一位;至j遍...原创 2019-12-20 11:31:50 · 79 阅读 · 0 评论 -
剑指offer——22.链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个结点。知识点:注意这种想法:找倒数第几个、中间的数或三分之一的数这种题,可以利用两个指针,通过指针移动的不同方式来实现注意:还是考虑的情况要周全,此题的头指针为空、k小于1、k大于链表长啊等等代码实现:定义2个指针pHead,pBehind,先让pHead先走(k-1),再一起走,当pHead走到链表尾端,pBehind也就指到了倒数第k...原创 2019-12-21 10:14:35 · 81 阅读 · 0 评论 -
剑指offer——29.顺时针打印矩阵(不熟)
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.知识点:利用vector构建二维数组时,vec.size()是行数;注意:注意打印的界限,从右往左、从下往上...原创 2019-12-24 09:41:20 · 88 阅读 · 0 评论 -
剑指offer——30.包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。知识点:这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈注意:无代码实现:借助辅助栈(栈顶元素即为最小值)来保存 每一步操作之后正常栈中最小的数 。/*包含min函数的栈*/stack<int> m_data;stack<int> m_...原创 2019-12-24 10:26:30 · 83 阅读 · 0 评论 -
剑指offer——31.栈的压入、弹出序列(想法不错,比剑指的简单)
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)知识点:无注意:无代码实现:引入辅助栈,按压入顺序一个一个压入辅助栈,...原创 2019-12-24 20:08:14 · 92 阅读 · 0 评论 -
剑指offer——32.从上到下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。知识点:像这种不是按照指针顺序打印的都需要引入辅助空间,由于分析可知,先进先出,因此我们引入了两端都可进出的队列deque,常用操作,deque.front(),back(),push_back(),pop_back()等注意:无代码实现:借助辅助队列,弹出队列头节点的同时,在队列后压入头节点的左右子节点,循环至队列中无...原创 2019-12-25 11:33:32 · 87 阅读 · 0 评论