LeetCode:455. 分发饼干 - 力扣(LeetCode)
1.思路
从胃口或饼干大小两个角度中的一个去考虑
方法一:优先考虑饼干,小饼干满足小胃口。
方法二:优先考虑胃口,大胃口对应大饼干。
2.代码实现
class Solution {
// 优先考虑饼干,小饼干先喂小胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = 0; //
int count = 0;
for (int i = 0; start < g.length && i < s.length; i++) {
if (g[start] <= s[i]) {
count++;
start++;
}
}
return count;
}
}
class Solution {
// 优先考虑胃口,大胃口对应大饼干。
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = s.length - 1;
int count = 0;
for (int i = g.length - 1; i >= 0 && start >= 0; i--) {
if (s[start] >= g[i]) {
count++;
start--;
}
}
return count;
}
}
3.复杂度分析
时间复杂度:O(nlogn).
空间复杂度:O(n).
LeetCode:376. 摆动序列 - 力扣(LeetCode)
1.思路
极值思维,当节点数为1时,直接返回1;节点数为2时判断是否相同,不相同,返回2,相同返回1。3个及以上的数时有三种情况,单调递增或单调递减,有增有减,递增或递减中有平坡。
2.代码实现
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length == 1) return 1;
int prediff = 0;
int curdiff = 0;
int result = 1;
for (int i = 0; i < nums.length - 1; i++) {
curdiff = nums[i + 1] - nums[i];
// 一正一负为拐点
if ((prediff >= 0 && curdiff < 0) || (prediff<= 0 && curdiff > 0)) {
result++;
prediff = curdiff; // 当产生拐点时再进行赋值
}
}
return result;
}
}
3.复杂度分析
时间复杂度:O(n).
空间复杂度:O(1).
LeetCode:
1.思路
做一个标记值count,如果sum+nums[i]<0则归零count=0。
2.代码实现
class Solution {
public int maxSubArray(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
int sum = Integer.MIN_VALUE; // 整型最小值10位
int count = 0; // sum + nums[i]小于0时舍弃
for (int i = 0; i < nums.length; i++) {
count += nums[i];
sum = Math.max(sum, count);
if (count <= 0) {
count = 0;
}
}
return sum;
}
}
3.复杂度分析
时间复杂度:O(n).
空间复杂度:O(1).