Leetcode 算法面试冲刺 热题 HOT 100 刷题(406 416 437 438 448)(六十九)
文章目录
- 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)(六十九)相关推荐
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- Leetcode 500题AC的刷题总结(C与C++)
文章目录 前引闲聊 500AC达成截图 + 力扣刷题每日频率 前引闲聊 哈哈 又到了我的闲聊时间了 与其这篇说是500题AC的总结 不如说是我的闲聊时间 我记得上一篇关于Leetcode AC记录 还 ...
- C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套
文章只能发选择题,刷大题去刷题软件效果会更好 刷题软件 gongzhonghao:露露IT 选择题 1.下面选项中不是关系数据库基本特征的是_______. A. 不同的列应有不同的列名 B. 不同的 ...
- 蓝桥杯刷题015——最少刷题数(二分法+前缀和)
问题描述 小蓝老师教的编程课有 N 名学生, 编号依次是 1-N .第 i 号学生这学期刷题的数量是 Ai . 对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题比他多的学生数不超 ...
- JavaScript学习(六十九)—正则表达式实训题
JavaScript学习(六十九)-正则表达式实训题 复习一下所学的知识 实训练习
- c++刷题_今日刷题(5)
微信小程序可以刷题咯,购买系统班同学可以在学员群中打卡小程序刷题,错过可以在公众号补充练习,但公众号不对答案进行解析哟~一起刷题嗨起来~ 刷题知识模块与系统班授课进程匹配温馨提示:公众号刷题并非每天都 ...
- CFA/FRM/CAIA刷题名单 必刷题库
CFA/FRM/CAIA刷题名单 必刷题库地址 介绍
- 令人拍案叫绝的算法学习网站新手算法入门到精通,算法面试冲刺资料这里都有
(9月已更)学算法认准这6个网站就够了! 写在前面:作为ACM铜牌选手,从FB到腾讯,从事算法&java岗位工作也是5年有余.在工作中接触到了很多同学,在算法学习和算法面试这件事上我还是很有发 ...
- 令人拍案叫绝的算法学习网站,算法入门到精通,算法面试冲刺资料这里都有
前言 作为ACM铜牌选手,从FB到腾讯,从事算法&java岗位工作也是5年有余.在工作中接触到了很多同学,在算法学习和算法面试这件事上我还是很有发言权的. 今天就跟想学算法的同学分享一下我私藏 ...
最新文章
- 百度地图设置div样式宽高为百分比不显示地图
- iOS9临时性解决HTTP以及scheme跳转问题
- 成功解决from nets import inception_resnet_v2 ModuleNotFoundError: No module named 'nets'
- 【收藏】Docker安装微信
- 在Windows Server 2008的桌面上显示“我的电脑”“网上邻居”等图标?
- Android 多媒体视频播放一( 多媒体理解与经验分享)
- windows重绘机制原理
- dos创建mysql数据库_用命令创建MySQL数据库
- 常见鸟的种类及特点_常见乌龟的品种及图片大全!
- 最近在校园内发现暴风一号病毒(俗称1kb病毒),普及一下查杀和修复的方法
- oralce 表字段扩容(修改表字段长度)
- 云计算大佬必看|IDC主机销售管理系统详细对比评测
- 基于SpringBoot微信公众号的开发
- mysql学习记录_秦路天善智能Mysql学习笔记
- SCCM部署系统任务序列失败错误代码0x80070002
- AVFoundation 框架小结
- GNS3导入c7200路由器
- 045:魔兽世界三(开战) 程序设计实习MOOC / 程序设计与算法(三)测验题汇总(2020春季) 已经结束
- 部门来了个拿25k出来的00后测试卷王,老油条表示真干不过,已被...
- 文件,文件夹对比工具(Beyond Compare)