Maximum subarray(Leetcode 53):
找到最大的subarray的和,这题的关键在于 :
f[i] = max(f[i-1]+nums[i],nums[i])
可以转化为:
f[i] = f[i-1]>0?f[i-1]+nums[i]:nums[i]
主要就是判断之前的f[i-1]
是不是为负,如果是的则舍弃
Find All Duplicates in an Array(Leetcode 442):
找到整数array满足1 ≤ a[i] ≤ n (n = size of array)
,其中的重复元素:
这道题的思想就是从i = 1
开始,判断nums[i-1]
是否等于i ,如果不等的话再判断nums[nums[i-1]-1]
是不是等于nums[i-1]
,如果相等的话则出现重复记录下来,如果不等的话则把这两个位置交换,然后i++后重复之前的运算。
Best Time to Buy and Sell Stock(Leetcode 121):
L[i]
保存直到第i天最便宜的价格
p[i]
保存直到第i天最大的利润
p[i] = max(p[i-1],prices[i]-L[i])
prices[i]-L[i]
代表的就是我今天卖能获得的最大利润,一直track这个和p[i-1]
的大小
House Robber(Leetcode 198):
实际上就是判断第 i 个房子我抢了的受益和我不抢的受益哪个大,f[i]
表示第i个房子的受益
f[i] = max(f[i-1],f[i-2]+nums[i])
因为相邻不能抢,所以我有两个选择,抢了受益就是f[i-2]+nums[i]
,不抢就是f[i-1]
取其中最大的