455.分发饼干
文章
思路
从最小的饼干开始分发给最小胃口的孩子
代码
class Solution {
public int findContentChildren(int[] g, int[] s) {
int i, j, n, m, ans;
ans = 0;
n = g.length;
m = s.length;
Arrays.sort(g);
Arrays.sort(s);
i = 0;
j = 0;
while (i < m && j < n) {
while (i < m && j < n && s[i] < g[j]) {
++i;
}
if (i < m && j < n) {
++ans;
++j;
++i;
}
}
return ans;
}
}
376.摆动序列
文章
思路
遍历数组,找到非严格单调区间的分界
代码
class Solution {
public int wiggleMaxLength(int[] nums) {
int ans, i, n;
n = nums.length;
if (n < 2) {
return 1;
}
ans = 1;
int inc = 0;
for (i = 0; i < n - 1; ++i) {
if (nums[i + 1] == nums[i]) {
continue;
}
if (inc == 0) {
inc = nums[i + 1] - nums[i];
++ans;
} else if (inc * (nums[i + 1] - nums[i]) < 0) {
inc = nums[i + 1] - nums[i];
++ans;
}
}
return ans;
}
}
53.最大子序和
文章
思路
用一个变量保存从序列开始到当前访问位置的累加
用一个变量保存遍历历史上最小的序列和,初始为0代表没开始累加的状态
维护二者差的最大值
返回这个最大值
代码
class Solution {
public int maxSubArray(int[] nums) {
int sum, upper, lower;
sum = 0;
upper = nums[0];
lower = 0;
int i, n;
n = nums.length;
for (i = 0; i < n; ++i) {
sum += nums[i];
upper = upper > (sum - lower) ? upper : (sum - lower);
lower = sum < lower ? sum : lower;
}
return upper;
}
}
总结
不太会贪心,记得当初上课讲过拟阵性质,这类题很难找特征