12.数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方 保证base和exponent不同时为0 解题思路 方法一,笨办法,累乘 第一种思路是常规思路,也是笨办法,就是累乘,最容易想到(方法一),但是这种方法很慢 方法二,快速幂
13.调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题思路 方法一,类似于插入排序,依次检测,遇到奇数就把奇数调到前面去,前面的偶数依次向后
14.链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路 思路一,简单思路,先遍历整个链表,获得链表的长度,然后求出倒数第k个结点的下标,然后再遍历过去。 思路二,设置两个指针,见下面的图,一目了然,两种方法其实复杂度差不多,实际上都是指针过两遍: 设置两个指针p和p1,当p跑
15.反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题思路 思路一,一路向下,两个指针,依次遍历结点,先保存下一个结点地址,然后将当前结点的指针反转。很简单,看代码就懂了,但是一定要注意避免出现断链(即忘了先保存下一个结点地址)和环路(即忘记将第一个结点的next改为NULL了)。 思路
16.合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路 迭代思想,两个指针*next1,*next2分别指向两个链表的下一个结点,一个指针*p指向已经合并的链表的最后一个结点,比较next1和next2的val,把小的那个接
17.树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 首先要搞清楚子树和子结构的区别: 子树:如果B是A的子树,那么从A的某一个结点开始,一直到叶子结点要全都和B的结点相同(一直到根节点); 子结构(本题):只要B是A里面的任意一个部分
18.二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 1 2 3 4 5 6 7 8 9 10 11 12 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 解题思路 递归的思想,从上往下依次把左右子树交换不就行了?So easy !(前序遍历) 迭代的思想,需要借助队列或者栈
19.顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字)。 例如,如果输入如下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. (实际代码通过返回一个按打印顺序排列的数组来实现)
20.包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为$O(1)$)。 解题思路 思路一,设置两个栈,一个栈stack_data用于正常保存元素,另一个栈stack_min用于保存最小元素,如果新push的元素比stack_min的栈
21.栈的压入、弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。