1 递归
10 斐波那契数列 JZ7
跳台阶 JZ8
矩形覆盖 JZ10
38 字符串的排列 JZ27
求N!
汉诺塔问题
求字符串所有子序列
母牛的数量
2 贪心策略
变态跳台阶 JZ9
45 把数组排成最小的数 JZ32
14 剪绳子 JZ67
分金条的最小花费CD51
做项目的最大收益问题CD50
3 动态规划
4 图&回溯法
12 矩阵中的路径 JZ65
13 机器人的运动范围 JZ66
5 数组
未排序正数组中,累加和为给定值的最长子数组长度
给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k。求arr的所有子数组中所有元素相加和为k的最长子数组的长度
6 栈和队列
JZ59.1队列实现栈225
JZ59.2栈实现队列232
JZ20 包含min函数的栈 155
JZ64 滑动窗口的最大值
JZ21 栈的压入、弹出序列
7 矩阵
29 顺时针打印矩阵(54. Spiral Matrix)(系列)
旋转矩阵
旋转图像
例如,arr = [1, 2, 1, 1, 1], k = 3
累加和为3的最长子数组为[1, 1, 1],所以结果返回3
[要求]
时间复杂度为O(n),空间复杂度为O(1)
输入描述:
- 第一行两个整数N, k。N表示数组长度,k的定义已在题目描述中给出
- 第二行N个整数表示数组内的数
输出描述:
- 输出一个整数表示答案
8 树
1 二叉树的深度
2 二叉树的先序、中序、后序遍历(递归,非递归)
3 二叉树的序列化、反序列化
4 平衡二叉树
5 中序遍历的后继、前级节点
补充题目
63 买股票的最佳时机
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
class Solution {
public:
int maxProfit(vector<int>& prices)
{
if (prices.empty() || prices.size() < 2)
return 0;
int min_price = prices[0];
int max_profit = prices[1] - min_price;
for (int i = 1; i < prices.size(); i++)
{
if (prices[i] > min_price)
{
if (prices[i] - min_price > max_profit)
{
max_profit = prices[i] - min_price;
}
}
if (prices[i] < min_price)
min_price = prices[i];
}
return max_profit>0?max_profit:0; //如果是递减数列,则小于0
}
};