您现在的位置是:首页 >其他 >Leetcode 第15天 贪心算法 字典树 python网站首页其他
Leetcode 第15天 贪心算法 字典树 python
以下题目来源力扣
55. 跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
class Solution:
def canJump(self, nums: List[int]) -> bool:
max_len=0
terget=len(nums)-1
for i in range(len(nums)):
if (i <= max_len) :
max_len=max(max_len,i+nums[i])
if max_len>=terget:
return True
return False
435. 无重叠区间
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
if intervals==None:
return 0
intervals.sort(key=lambda x: x[1])
start=intervals[0][1]
n = len(intervals)
ans = 1
for i in range(1, n):
if intervals[i][0] >= start:
ans += 1
start = intervals[i][1]
return n - ans
621. 任务调度器
给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。
然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。
你需要计算完成所有任务所需要的 最短时间 。
452. 用最少数量的箭引爆气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。
一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。
给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数
class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int:
# if len(points)==1:
# return 1
points.sort(key=lambda x:x[1])
ans=1
right=points[0][1]
for i in range(1,len(points)):
# right=max(right,points[i][1])
if points[i][0]<=right<=points[i][1]:
continue
ans=ans+1
right=points[i][1]
return ans
字典树
820. 单词的压缩编码
单词数组 words 的 有效编码 由任意助记字符串 s 和下标数组 indices 组成,且满足:
words.length == indices.length
助记字符串 s 以 ‘#’ 字符结尾
对于每个下标 indices[i] ,s 的一个从 indices[i] 开始、到下一个 ‘#’ 字符结束(但不包括 ‘#’)的 子字符串 恰好与 words[i] 相等
给你一个单词数组 words ,返回成功对 words 进行编码的最小助记字符串 s 的长度 。
208. 实现 Trie (前缀树)
Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。
请你实现 Trie 类:
Trie() 初始化前缀树对象。
void insert(String word) 向前缀树中插入字符串 word 。
boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。
boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。
640. 求解方程
求解一个给定的方程,将x以字符串 “x=#value” 的形式返回。该方程仅包含 ‘+’ , ‘-’ 操作,变量 x 和其对应系数。
如果方程没有解或存在的解不为整数,请返回 “No solution” 。如果方程有无限解,则返回 “Infinite solutions” 。
题目保证,如果方程中只有一个解,则 ‘x’ 的值是一个整数。
class Solution:
def solveEquation(self, equation: str) -> str:
factor = val = 0
i, n, sign = 0, len(equation), 1 # 等式左边默认系数为正
while i < n:
if equation[i] == '=':
sign = -1
i += 1
continue
s = sign
if equation[i] == '+': # 去掉前面的符号
i += 1
elif equation[i] == '-':
s = -s
i += 1
num, valid = 0, False
while i < n and equation[i].isdigit():
valid = True
num = num * 10 + int(equation[i])
i += 1
if i < n and equation[i] == 'x': # 变量
factor += s * num if valid else s
i += 1
else: # 数值
val += s * num
if factor == 0:
return "No solution" if val else "Infinite solutions"
return f"x={-val // factor}"