classSolution:defwiggleMaxLength(self, nums: List[int])->int:# 求峰值的个数iflen(nums)<=1:returnlen(nums)
curdiff =0
prediff =0
result =1# 左侧for i inrange(len(nums)-1):
curdiff = nums[i+1]- nums[i]# 后一个和当前的差值if curdiff * prediff <=0and curdiff !=0:# 只有cur出现摆动,才表示+1。prediff=0只出现在开头
result +=1
prediff = curdiff # 只在摆动的时候改变prediffreturn result
classSolution:defwiggleMaxLength(self, nums: List[int])->int:# dp# dp[i][0] i 作为波峰的最大长度# dp[i][1] i 作为波谷的最大长度
dp =[]for i inrange(len(nums)):
dp.append([1,1])for j inrange(i):# nums[i]为波谷if nums[j]> nums[i]:
dp[i][1]=max(dp[j][0]+1, dp[i][1])# j是前面的某个波峰# nums[i]为波峰if nums[j]< nums[i]:
dp[i][0]=max(dp[i][0], dp[j][1]+1)returnmax(dp[-1][0], dp[-1][1])
53. 最大子序和
暴力法比较好写,但是贪心确实挺难想的。。。没有见过的题咋写呢。。。
classSolution:defmaxSubArray(self, nums: List[int])->int:# 贪心算法
result =float('-inf')
count =0for i inrange(len(nums)):
count += nums[i]
result =max(count, result)if count <0:
count =0return result
# 暴力法
result =float('-inf')for i inrange(len(nums)):
count =0for j inrange(i,len(nums)):
count += nums[j]
result =max(result, count)return result