class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
dp = [0]*len(prices)
minprice = prices[0]
for i in range(1,n):
minprice = min(prices[i],minprice)
dp [i] = max(dp[i-1],prices[i]-minprice)
return dp[n-1]
动态规划题目,设计状态转移方程,为dp [i] = max(dp[i-1],prices[i]-minprice),其中minprice表示是当前价格的最低值。
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
nums1.sort()
nums2.sort()
ans = []
index1 = 0
index2 = 0
while index1 < len(nums1) and index2<len(nums2):
if nums1[index1] < nums2[index2]:
index1 += 1
elif nums1[index1] > nums2[index2]:
index2 += 1
else:
ans.append(nums1[index1])
index1 += 1
index2 += 1
return ans
用两个指针即可。
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
ans = []
p1,p2 = 0,0
while p1<m or p2<n:
if p1 == m:
ans.append(nums2[p2])
p2+=1
elif p2 == n:
ans.append(nums1[p1])
p1+=1
elif nums1[p1]>nums2[p2]:
ans.append(nums2[p2])
p2 += 1
else:
ans.append(nums1[p1])
p1 += 1
nums1[:] = ans
用两个指针即可。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
flag = False
for i in range(0,len(nums)-1):
if nums[i] == nums [i+1]:
flag = True
return flag
排序即可。
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
pre = 0
res = nums[0]
for i in range(len(nums)):
pre = max(nums[i],pre+nums[i])
res = max(pre,res)
return res
动态规划,如果当前值+之前的值>当前值 则选择当前值+之前的值,否则为当前值。