944. 删列造序
理解题目意思:就是单个字符比较,如果前面的大于后面的,则结果加一,并且开始比较第二行
559. N叉树的最大深度
1)算出每个子结点的最大深度,取其中最大一个
2)总结点深度=子节点深度+1
509. 斐波那契数
递归调用
1)退出条件
N==0,return 0
N==1,return 1
2)递归公式
fib(N-1) + fib(N-2)
优化:定义两个变量来保存中间计算的结果
908. 最小差值 I
该题重要的是理解题意:找到输入数组的最大值和最小值
公式:max(d_max-d_min-2*K,0)
965. 单值二叉树
递归调用
1)判断根节点与子节点的值是否相等
2)如果相等,则对其左右子结点做递归判断
3)只要结果为false,则返回
1002. 查找常用字符
1)定义vector<map<char, int>> char_num_vector来保存数据
2)先统计每个字符串的字符个数
3)取其中最小的字符个数,塞到最终的结果中
4)涉及char和string类型转换:string s(1, char_tmp);
181. 超过经理收入的员工(SQL)
一张表使用两次
999. 车的可用捕获量
分治的思想
1)先找到车的坐标
2)根据车的规则,以车坐标为中心,分为四条路径
3)任意一条路径找到象,停止;找到卒,将数量+1,再停止
922. 按奇偶排序数组 II
双坐标替换思想
需要注意:
1)坐标初始值为0和1;
2)坐标增值为2
3)while的退出条件,需要把坐标判断放在前面
while(i < A.size() && 0 == A[i] % 2)
{
i += 2;
}
108. 将有序数组转换为二叉搜索树
二分法+迭代
1)退出条件
if (left > right) return NULL;
2)找到中间点
int mid = (left + right) / 2;
3)构建新的Node
TreeNode *cur = new TreeNode(num[mid]);
4)该Node左节点使用迭代
cur->left = sortedArrayToBST(num, left, mid - 1);
5)该Node右节点使用迭代
cur->right = sortedArrayToBST(num, mid + 1, right);
6)返回当前点
return cur;