20210719一周总结

剑指offer刷题总结 第二周

重点总结

67道题基本完成了 剩下一些堆排序和树的遍历的问题待解决

分题总结

JZ1 一次折半查找的时间复杂度是logN 本题二维数组就可以N次折半 复杂度NlogN 同时取巧的方法是从右上或左下开始 把比较的结果当作判定条件加以利用
JZ2 计算距离从后往前按字符替换 涉及string基本函数
JZ18 遍历替换左右子树 各种遍历都可以
JZ20 设计一个辅助栈 同步存放每次push后当前的min值 push时同步弹出min
JZ21 模拟栈的出入栈操作 找出规律 从顶向底无法跳格
JZ22 层次遍历 注意记录下层入队的节点数 做好判断是否下层
JZ23 设计判断函数 从最后一个节点 也就是根 将数列分开左右 从第一个大于该数的节点开始 后面的节点都要大于根节点值
JZ24 DFS
JZ26 递归 传入链表头的引用 中序遍历的同时 重新链接每个节点
JZ27 动态规划 f(abc) = af(bc)+bf(ac)+c*f(ab)
JZ30 动态规划 便利的同时记录 MAX 和窗口的正负值若 窗口<1 则原地重新开窗口
JZ31 把大数分成整数和余数分开处理 余数递归成下一个大数继续分
JZ33 丑数都是由任意个2、3、5相乘得来的 把待测数分别除以2、3、5直到不能整除 若得1 则是丑数 否则不是丑数
JZ34 hash查找复杂度是O(1) 所以可以存放一个int数组存放256个元素模拟ascii 记录出现的次数 遍历时检测是否为1
JZ38 遍历即可
JZ39 设计函数递归计算树的深度 再遍历一次每个节点判断是否平衡 可以后序遍历加速递归
JZ40 将所有数相与& 结果相当于只出现一次那两个数相与 按结果的最后一位1与所有数相与 将它们分成两组 这一位可以将两个出现一次的树分开 这样两组各自相与 即得结果
JZ41 从sqrt(n)到n/2 双指针维护一个窗口 若窗口数值和大于S则小指针右移 若小于S则大指针右移
JZ43 先全部旋转 再两部分分别旋转一次 也可以用字符串截取与拼接的方法
JZ44 同上 先全部旋转 再分词旋转
JZ45 只要有两张非大小王 则这两张的数值差距不能超过4
JZ46 约瑟夫环问题 存入容器 迭代求解
JZ47 递归出口可以用短路求值int Func(int n) { int res= 0; bool x = n&&res = Func(n-1); return res;}
JZ48 分别计算不进位的和r1与进位情况r2 再r1和r2相加 重复上述两步骤 直到进位r2为0 返回r1出结果
JZ49 判断是否合法 第一位特殊处理 以后每一位isdigit()判断 再sum = sum*10+k直到最后返回sum
JZ54 同34 不过可以用队列解法更精妙 待解决
JZ58 递归判断即可
JZ59 层次遍历 计算层数 双数层reverse 即可
JZ60 层次遍历
JZ61 字符串处理问题 递归求解问题
JZ62 递归和迭代都可以 中序遍历返回节点
JZ63 排序之后计算暴力解决 还可以用来处理 待解决
JZ64 双指针 每次右移判断进入窗口的右指针和离开窗口的左指针与MAX的关系

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值