文章目录

  • 406. 根据身高重建队列
  • 416. 分割等和子集
  • 437. 路径总和 III
  • 438. 找到字符串中所有字母异位词
  • 448. 找到所有数组中消失的数字

406. 根据身高重建队列




一句话理解:就是先把这些人按照个头,从大到小排列,然后我们再按照第2个数进行index插入。原理就是,比如第3个人要插入队列时,前面已经排好的2个人,身高都大于等于他。他只插在index位置,就是前面有几个人比他高。








class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:res = []people = sorted(people, key = lambda x: (-x[0], x[1]))for p in people:if len(res) <= p[1]:res.append(p)elif len(res) > p[1]:res.insert(p[1], p)return res

下面是我写的代码:

class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:# 根据第一个1元素的负数,当第一个元素负数相等,根据第二个元素正数排序people.sort(key = lambda x : (-x[0], x[1]))res = []for p, ind in people:if len(res) < ind:res.append([p, ind])else:res.insert(ind, [p, ind])return res

416. 分割等和子集

437. 路径总和 III


知道要用回溯,但是具体写不出来,一个是root不一定是定点,而是每一个点都可能是root。这里没想明白。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:ps = []cnt = 0def backtrack(root, ps, cnt):if not root: return 0if sum(ps) == targetSum:cnt += 1ps.pop()returnps.append(root.val)backtrack(root.left, ps, cnt)backtrack(root.right, ps, cnt)backtrack(root, ps, cnt)return cnt

class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> int:def rootSum(root, targetSum):if root is None:return 0ret = 0if root.val == targetSum:ret += 1ret += rootSum(root.left, targetSum - root.val)ret += rootSum(root.right, targetSum - root.val)return retif root is None:return 0ret = rootSum(root, targetSum)ret += self.pathSum(root.left, targetSum)ret += self.pathSum(root.right, targetSum)return ret

下面是我写的:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def pathSum(self, root: Optional[TreeNode], targetSum: int) -> int:def helper(root, targetSum):if not root: return 0res = 0if root.val == targetSum:res += 1res += helper(root.left, targetSum - root.val)res += helper(root.right, targetSum - root.val)return resif not root: return 0res = helper(root, targetSum)res += self.pathSum(root.left, targetSum)res += self.pathSum(root.right, targetSum)return res

需要二刷。

438. 找到字符串中所有字母异位词


写了一个常规方法,超时了:

class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:res = []length = len(p)for i in range(len(s) - length + 1):tmp_s = s[i: i + length]tmp = "".join(sorted(tmp_s))if tmp == p:res.append(i)return res


根据思路自己写的:

class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:len_s, len_p = len(s), len(p)if len_s < len_p:return []s_cnt = [0] * 26p_cnt = [0] * 26for i in range(len_p):s_cnt[ord(s[i]) - 97] += 1p_cnt[ord(p[i]) - 97] += 1res = []if s_cnt == p_cnt:res.append(0)for i in range(len_s - len_p):s_cnt[ord(s[i]) - 97] -= 1s_cnt[ord(s[i + len_p]) - 97] += 1if s_cnt == p_cnt:res.append(i + 1)return res

448. 找到所有数组中消失的数字


简单题,写了个暴力法,超时了

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n = len(nums)res = []for i in range(1, n + 1):if i not in nums:res.append(i)return res

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n = len(nums)for num in nums:x = (num - 1) % nnums[x] += nret = [i + 1 for i, num in enumerate(nums) if num <= n]return ret

哈希的方法:

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:dic = {}for num in nums:if num in dic:dic[num] += 1else:dic[num] = 0res = []for i in range(1, len(nums) + 1):if i not in dic:res.append(i)return res

Leetcode 算法面试冲刺 热题 HOT 100 刷题(406 416 437 438 448)(六十九)相关推荐

  1. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  2. Leetcode 500题AC的刷题总结(C与C++)

    文章目录 前引闲聊 500AC达成截图 + 力扣刷题每日频率 前引闲聊 哈哈 又到了我的闲聊时间了 与其这篇说是500题AC的总结 不如说是我的闲聊时间 我记得上一篇关于Leetcode AC记录 还 ...

  3. C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套

    文章只能发选择题,刷大题去刷题软件效果会更好 刷题软件 gongzhonghao:露露IT 选择题 1.下面选项中不是关系数据库基本特征的是_______. A. 不同的列应有不同的列名 B. 不同的 ...

  4. 蓝桥杯刷题015——最少刷题数(二分法+前缀和)

    问题描述 小蓝老师教的编程课有 N 名学生, 编号依次是 1-N .第 i 号学生这学期刷题的数量是 Ai​ . 对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题比他多的学生数不超 ...

  5. JavaScript学习(六十九)—正则表达式实训题

    JavaScript学习(六十九)-正则表达式实训题 复习一下所学的知识 实训练习

  6. c++刷题_今日刷题(5)

    微信小程序可以刷题咯,购买系统班同学可以在学员群中打卡小程序刷题,错过可以在公众号补充练习,但公众号不对答案进行解析哟~一起刷题嗨起来~ 刷题知识模块与系统班授课进程匹配温馨提示:公众号刷题并非每天都 ...

  7. CFA/FRM/CAIA刷题名单 必刷题库

    CFA/FRM/CAIA刷题名单 必刷题库地址 介绍

  8. 令人拍案叫绝的算法学习网站新手算法入门到精通,算法面试冲刺资料这里都有

    (9月已更)学算法认准这6个网站就够了! 写在前面:作为ACM铜牌选手,从FB到腾讯,从事算法&java岗位工作也是5年有余.在工作中接触到了很多同学,在算法学习和算法面试这件事上我还是很有发 ...

  9. 令人拍案叫绝的算法学习网站,算法入门到精通,算法面试冲刺资料这里都有

    前言 作为ACM铜牌选手,从FB到腾讯,从事算法&java岗位工作也是5年有余.在工作中接触到了很多同学,在算法学习和算法面试这件事上我还是很有发言权的. 今天就跟想学算法的同学分享一下我私藏 ...

最新文章

  1. 百度地图设置div样式宽高为百分比不显示地图
  2. iOS9临时性解决HTTP以及scheme跳转问题
  3. 成功解决from nets import inception_resnet_v2 ModuleNotFoundError: No module named 'nets'
  4. 【收藏】Docker安装微信
  5. 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
  6. Android 多媒体视频播放一( 多媒体理解与经验分享)
  7. windows重绘机制原理
  8. dos创建mysql数据库_用命令创建MySQL数据库
  9. 常见鸟的种类及特点_常见乌龟的品种及图片大全!
  10. 最近在校园内发现暴风一号病毒(俗称1kb病毒),普及一下查杀和修复的方法
  11. oralce 表字段扩容(修改表字段长度)
  12. 云计算大佬必看|IDC主机销售管理系统详细对比评测
  13. 基于SpringBoot微信公众号的开发
  14. mysql学习记录_秦路天善智能Mysql学习笔记
  15. SCCM部署系统任务序列失败错误代码0x80070002
  16. AVFoundation 框架小结
  17. GNS3导入c7200路由器
  18. 045:魔兽世界三(开战) 程序设计实习MOOC / 程序设计与算法(三)测验题汇总(2020春季) 已经结束
  19. 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
  20. 文件,文件夹对比工具(Beyond Compare)

热门文章

  1. noip2015day1
  2. winbugs MATLAB,winbugs问题求教:
  3. 用户画像(一):我对用户画像的理解
  4. jquery获取元素四种方式。
  5. 用python 读取excel 指定列
  6. python 某文书网JS逆向 登录加密算法还原
  7. 超级简单!编译的C++生成的exe文件发给别人,直接在其他电脑运行超级简单!亲测有效!
  8. Python数据分析之用户留存
  9. 关于数组名(arr)的理解
  10. 怎么用python画螺旋_用Python tu绘制螺旋