题目:使用两个栈实现队列功能。队列需支持两个操作:appendTail 和 deleteHead,分别用于在队列尾部添加整数和从队列头部移除整数(如果队列为空,则 deleteHead 返回 -1)。
解题思路:利用两个栈,一个用于处理入队操作,另一个用于处理出队操作。当执行出队操作时,如果出栈为空,则将入栈的所有元素依次弹出并压入出栈,然后从出栈弹出元素。
题目:编写一个函数,接收一个整数 n 作为参数,返回斐波那契数列的第 n 项。斐波那契数列定义如下:
F(0) = 0, F(1) = 1, F(N) = F(N - 1) + F(N - 2), for N > 1.
解题思路:采用动态规划的方法,通过迭代计算前两项之和来获得当前项的值。
题目:假设有一只青蛙每次可以跳上 1 级或 2 级台阶。求该青蛙跳上 n 级台阶共有多少种不同的方法。
解题思路:同样可以使用动态规划解决此问题。设跳上 n 级台阶有 f(n) 种方法,那么最后一步要么从 n-1 级跳上来,要么从 n-2 级跳上来。因此,f(n) = f(n-1) + f(n-2),初始条件为 f(0) = 1, f(1) = 1。
题目:给定一个可能包含重复元素的数组,该数组原本是按升序排列的,并进行了旋转。任务是找出这个旋转数组中的最小元素。例如,数组 [3,4,5,1,2] 是数组 [1,2,3,4,5] 经过一次旋转得到的结果,其最小值为 1。
解题思路:使用二分查找算法。设置三个指针 low, mid, high 分别指向数组的起始位置、中间位置和结束位置。根据 mid 和 high 位置的值进行比较,调整搜索范围,直到找到最小值。