随笔分类 -  剑指offer

1
摘要:题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 思路: 比较水的题目。 一般而言找到栈内最小值,需要遍历栈,此时时间复杂度为O(n) 为了达到O(1)的时间复杂度,我们可以采用空间换时间的策略: 额外维护一个栈min_list,当pu 阅读全文
posted @ 2021-01-15 00:41 声声醉如兰 阅读(69) 评论(0) 推荐(0)
摘要:题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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. 示例1 输入 复制 阅读全文
posted @ 2021-01-13 23:45 声声醉如兰 阅读(106) 评论(0) 推荐(0)
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 思路: 递归,在回溯过程中交换当前节点的左右儿子即可 /* struct Tre 阅读全文
posted @ 2021-01-09 21:33 声声醉如兰 阅读(84) 评论(0) 推荐(0)
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 示例1 输入 复制 {8,8,#,9,#,2,#,5},{8,9,#,2} 返回值 复制 true 思路: 判断树的结构,很明显需要递归。 若p2是p1的子树,则应该同时满足以下条件: 1.p2-> 阅读全文
posted @ 2021-01-07 21:25 声声醉如兰 阅读(107) 评论(0) 推荐(0)
摘要:题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 示例1 输入 复制 {1,3,5},{2,4,6} 返回值 复制 {1,2,3,4,5,6} 思路 1.非递归: 申请新的空间用于存放合并后的链表; 若当前pHead1的val值不大于pHead2 阅读全文
posted @ 2021-01-05 22:08 声声醉如兰 阅读(127) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 示例1 输入 复制 {1,2,3} 返回值 复制 {3,2,1} 思路 递归,用tail指针记录反转后链表的头部,在回溯时更改原链表。 /* struct ListNode { int val; struct ListNode *next; L 阅读全文
posted @ 2021-01-05 21:31 声声醉如兰 阅读(87) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,输出该链表中倒数第k个结点。 示例1 输入 复制 1,{1,2,3,4,5} 返回值 复制 {5} 思路: 1.遍历链表,计算链表长度len,倒数第k位是正数len-k+1位,缺点时浪费时间,但是最大时间开销不过2n /* struct ListNode { int val; 阅读全文
posted @ 2021-01-05 00:46 声声醉如兰 阅读(150) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路: 1.最容易想到的思路就是 额外开辟空间 分别存放奇数和偶数,最后再更改array中的数据。这个很容易实现,时间复 阅读全文
posted @ 2021-01-04 22:27 声声醉如兰 阅读(95) 评论(0) 推荐(0)
摘要:题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0 示例1 输入 复制 2,3 返回值 复制 8.00000 思路: 可以循环暴力,但是更节省时间的方法还是快速幂 通过每次迭代时将计算规模 阅读全文
posted @ 2021-01-04 21:21 声声醉如兰 阅读(90) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 示例1 输入 复制 10 返回值 复制 2 思路: 首先复习下原码、反码、补码(样例中均按照32位二进制计算) 原码:将整数取绝对值后转化为二进制,例如5的原码是 :00000000 00000000 00000000 阅读全文
posted @ 2021-01-04 00:22 声声醉如兰 阅读(63) 评论(0) 推荐(0)
摘要:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路: 定义dp[k]为覆盖2*k矩形的方案数 很容易发现,覆盖2*k的矩形可由2*(k-1)的矩形添加一个竖放的2*1的矩 阅读全文
posted @ 2021-01-03 23:38 声声醉如兰 阅读(52) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 示例1 输入 复制 3 返回值 复制 4 思路 JZ-8的简单变形,定义dp[k]为到达第k阶台阶的方案数 不难看出:dp[k] = dp[1] + dp[2] + dp[3] 阅读全文
posted @ 2021-01-03 23:23 声声醉如兰 阅读(67) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 示例1 输入 复制 1 返回值 复制 1 示例2 输入 复制 4 返回值 复制 5 思路 动态规划入门问题,定义dp[k]为到达第k阶台阶的方案数, 由于上楼的方案有两种 阅读全文
posted @ 2021-01-03 23:01 声声醉如兰 阅读(53) 评论(0) 推荐(0)
摘要:题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n\leq 39n≤39 示例1 输入 复制 4 返回值 复制 3 思路: 太水了,直接递推就可以 class Solution { public: int Fibonacc 阅读全文
posted @ 2021-01-03 22:45 声声醉如兰 阅读(47) 评论(0) 推荐(0)
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 示例1 输入 复制 [3,4,5,1,2] 返回值 复制 1 思路: 1.二分: 根据题意我们可以知道 阅读全文
posted @ 2021-01-03 20:05 声声醉如兰 阅读(82) 评论(0) 推荐(0)
摘要:题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路 比较简单,stack1用来存放每次push进来的数据 栈是先进后出的数据结构,而队列是先进先出的数据结构 在用栈模拟队列的pop时,将stack1弹出的元素暂时存放在stack2中 在stack1弹 阅读全文
posted @ 2021-01-03 18:55 声声醉如兰 阅读(60) 评论(0) 推荐(0)
摘要:题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 示例1 输入 复制 [1,2,3,4,5,6,7], 阅读全文
posted @ 2021-01-03 18:41 声声醉如兰 阅读(62) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 示例1 输入 {67,0,24,58} 返回值 [58,24,0,67] 思路: 1.递归的特性使得递归可以解决大部分的倒叙输出问题,所以最原始的思路就是直接递归。 /** * struct ListNode { * int 阅读全文
posted @ 2021-01-03 00:51 声声醉如兰 阅读(49) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路1: 每多一个空格,则新的字符串会多出两个空间,所以申请一个新的字符串如下: char *array = new char[l 阅读全文
posted @ 2021-01-02 23:53 声声醉如兰 阅读(92) 评论(0) 推荐(0)
摘要:题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例1 输入 7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8, 阅读全文
posted @ 2021-01-02 23:40 声声醉如兰 阅读(44) 评论(0) 推荐(0)

1