455.分发饼干
思路是照着最大的先满足,因此从后往前,满足一个就继续判定下一个。
func findContentChildren(g []int, s []int) int {
indexs := len(s) - 1
sort.Ints(g)
sort.Ints(s)
for i := len(g) - 1; i >= 0; i--{
if indexs >= 0 && g[i] <= s [indexs]{
indexs--;
}
}
return len(s) - indexs - 1
}
376. 摆动序列
相减之后判定是否同号,就是需要判定当差为0改如何跳过的问题,特别是最前面为0时。
func wiggleMaxLength(nums []int) int {
if len(nums) <2{
return len(nums)
}
sub := make([]int, len(nums) - 1)
knum := 0
for i := 0; i < len(sub); i++{
sub[i] = nums[i + 1] - nums[i]
if sub[i] != 0{
knum = 1
}
}
if knum == 0{
return 1
}
res := make([]int, 0)
for i := 0; i < len(sub); i++{
if sub[i] != 0{
res = append(res, sub[i])
break
}
}
for i := 1; i < len(sub); i++{
if res[len(res) - 1] * sub[i] < 0{
res = append(res, sub[i])
}
}
fmt.Print(res)
return len(res) + 1
}
53. 最大子序和
思路就是维护一个滑动窗口,当里面的值小于零了就舍弃重新开始。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = 0;
int max = nums[0];
for(int i = 0 ; i < nums.size() ; ++i){
if(sum < 0){
sum = 0;
}
sum += nums[i];
if(max < sum){
max = sum;
}
}
return max;
}
};