LeetCode思路(三):944、559、509、908、965、1002、181、999、922、108

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值