刷题总结总结

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]取其中最大的

你可能感兴趣的:(刷题总结)