- 博客(9)
- 收藏
- 关注
原创 剑指Offer面试题10:斐波那契数列
保存中间项,下次需要计算的时候直接查找该项就可以了,或者从下往上算,先算Fibo(0)、Fibo(1)...只有1级台阶,有一种跳法,只有2级台阶,有两种跳法,设n级台阶f(n),当n>2时,第一次跳有两种选择,第一次跳1级,此时跳法数目等于后面剩下n-1级台阶的跳法数目f(n-1),第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目f(n-2),故f(n)=f(n-1)+f(n-2),依旧是斐波那契数列。
2024-03-21 16:44:57 152 1
原创 剑指Offer面试题9(补充):用两个队列实现栈
同理,若向栈内压入元素1,2,3,若要依次弹出元素应为3,2,1,将队列1队头元素逐个压入队列2,输出队列1的队尾元素,当第一个数输出完后,此时队列2再将队头元素逐个压入队列1,输出队列2的队尾元素,直到全部输出。
2024-03-21 14:38:19 105 1
原创 剑指Offer面试题9:用两个栈实现队列
1.当stack2不为空时,stack2栈顶元素就是最先进入队列的元素,弹出;2.当stack2为空时,把stack1中的元素逐个弹出压入stack2。
2024-03-21 13:25:26 185 1
原创 剑指Offer面试题8:二叉树的下一个节点
根据中序遍历左根右的特点,1.当一个节点有右子树:则它的下一个节点就是它的右子树中最左节点;2.当一个节点没有右子树:(1)节点是其父节点的左子节点,则下一个节点是该父节点;(2)节点是其父节点的右子节点,沿着指向父节点指针向上遍历,直到找到一个是它父节点的左子节点的节点,如果存在,这个节点的父节点就是下一个节点。由于最开始没有定义父节点,导致输出错误。
2024-03-20 15:37:30 155 1
原创 剑指Offer面试题7:重建二叉树
/构建函数传入四根指针:前序&中序遍历的开始和结束指针//定义根节点的值//创建二叉树结构体类型实例作为根节点//初始化else//遍历中序序列找出根节点的值//计算出左子树的长度,在前序遍历序列中分割出左子树和右子树的部分if(leftLen > 0) //构建左子树if(ePreorder - leftPreorderEnd > 0) //构建右子树。
2024-03-20 12:51:28 114 1
原创 剑指Offer面试题6:从尾到头打印链表
int m_nkey;int m_nkey;if(pHead!= nullptr)= nullptr)这道题主要是针对链表的简单操作,不是很难,两种方法:栈&递归。
2024-02-28 18:26:20 334 1
原创 剑指Offer面试题5:替换空格
遍历字符串,遇到空格替换成%20,在原字符串上操作的基础上,若从前往后复制和替换,由于string不存在负索引会覆盖原始字符串中未替换的部分,先遍历找出原始长度和空格数量,新长度等于原始长度加上空格数量*2,用两个指针指向新字符串的末尾str[新长度]、str[原始长度],从后往前遍历,没遇到空格就复制,遇到空格就替换,直到结束。时间复杂度为O(n)。
2024-02-27 18:26:29 574
原创 剑指Offer面试题4:二维数组中的查找
这道题比较简单,由于给出的数组排序特性,采取右上角或者左下角数字进行比较操作,若给定数大于右上角数字,则说明右上角数字所在一行都小于此给定的数,所以删除右上角数字所在行,若给定元素小于右上角数字,说明右上角数字所在列都大于此给定的数,删除右上角数字所在列,左下角同理。左上角和右下角则无法判断。
2024-02-26 14:16:13 520
原创 剑指Offer面试题3:数组中重复的数字
关键在于此数组一定存在重复的情况,数字个数(数组长度)8大于数字范围7,将范围二分1-4,5-7,遍历整个数组,若在某一范围区间内,如1-4,满足这个范围的数字1-4在整个数组中出现的次数大于此范围长度4,说明在此区间有重复数字出现,继续进行二分,直到start=end,输出该数字。由此考虑将数组排序,依次把数字i放置到数组下标也为i的位置处,使其在数组中对应且唯一,若出现另一个位置上的数字与以该数字为下标对应的数字相等时,则输出重复数字。时间复杂度为O(n),空间复杂度为O(1)。
2024-02-25 17:15:38 572 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人