贪心
贪心即找最优解
1,分糖果
P455 easy
题目:
g=[5,10,2,9,15,9],s=[6,1,20,3,8],求最多满足几个孩子
思路:
排序糖果s,和孩子需求g,从小到大找,若小的能满足,继续g++,若不能满足s++,直到s<len(s) and g<len(g)
class Solution:
def findContentChildren(self, g: List[int], s: List[int]) -> int:
s = sorted(s)
g = sorted(g)
i = j = 0
while i<len(g) and j<len(s):
if g[i] <= s[j]:
i += 1
j += 1
return i
2,摇摆序列
P376 medium
题目:
nums=[1,7,4,9,2,5],相邻元素差:[6,-3,5,-7,3],正负交替。求满足这种序列的最长子序列长度
思路:
找最值,先定义一个初始值begin=0,找出比他大的则为up=1,小则为down=2,存到map中,每找一个值与前一个进行比较,直到找到最后
题解1:
class Solution(object):
def wiggleMaxLength(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums)<2:
return len(nums)
state = {'begin':0,'up':1,'down':2}
max_length = 1
cc = state.get('begin')
for i in range(1,len(nums),1):
if cc == 0:
if nums[i] > nums[i-1]:
cc = state.get('up')
max_length += 1
elif nums[i] < nums[i - 1]:
cc = state.get('down')
max_length += 1
elif cc == 1:
if nums[i] < nums[i-1]:
cc = state.get('down')
max_length += 1
elif cc == 2:
if nums[i] > nums[i-1]:
cc = state.get('up')
max_length += 1
return max_length
题解2:
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
n, c, res = len(nums), 0, 1
if n < 2:
return n
for i in range(1, n):
x = nums[i] - nums[i - 1]
# 如果有差值才继续处理,相等直接就跳过不处理了
if x:
# <0代表有上升下降的交替,=0是初始情况的判断
if x * c <= 0:
res += 1
c = x
return res
3,移除K个数字
P402 medium
题目:
num = "1432219" k=3,去掉k个数字,找出最小的
思路:
定义一个栈,存储更小的数。特殊情况:12345这种,直接删队尾,有0的情况,直接append
??未掌握??
class Solution:
def removeKdigits(self, num: str, k: int) -> str:
length = len(num)
if length == k:
return '0'
ll = [num[0]]
for i in range(1,length):
while ll and num[i] < ll[-1] and k > 0:
ll.pop()
k -= 1
if num[i] != '0' or ll:
ll.append(num[i])
while ll and k > 0:
ll.pop()
k -= 1
if not ll:
ll = ['0']
return ''.join(ll)
4,跳跃游戏
P55 medium
题目:
num=[2,3,1,1,4],可以跳num[i]次,判断是否可以跳到最后
思路:
定义可以跳跃的index数组index=[num[i]+i],jump从0开始,跳到len(num),找出index内最大的,
class Solution:
def canJump(self, nums: List[int]) -> bool:
index_list = []
for i in range(len(nums)):
index_list.append(nums[i]+i)
jump = 0
index = index_list[0]
while jump < len(index_list) and jump<=index:
if index<index_list[jump]:
index = index_list[jump]
jump += 1
if jump == len(index_list):
return True
return False
5,射击气球
P452 medium
题目:
points = [[1,2],[2,3],[3,4],[4,5]],输出2
思路:
先排序points,然后找交点,若没有了,则新增一个
6,买卖股票
P122 easy
同2-摇摆序列

浙公网安备 33010602011771号