455.分发饼干
代码如下:
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
int ans = 0;
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int i = 0, j = 0;
while (i < g.size() && j < s.size()) {
if (g[i] <= s[j]) {
i++;
ans++;
}
j++;
}
return ans;
}
};
376.摆动序列
代码如下:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() < 2) {
return nums.size();
}
int n = nums.size();
int up = 1; // 最长摆动上升子序列的长度
int down = 1; // 最长摆动下降子序列的长度
for (int i = 1; i < n; i++) {
if (nums[i] > nums[i - 1]) {
up = down + 1; // 如果当前元素比前一个元素大,最长上升子序列长度加1
} else if (nums[i] < nums[i - 1]) {
down = up + 1; // 如果当前元素比前一个元素小,最长下降子序列长度加1
}
}
return max(up, down); // 返回最长摆动子序列的长度
}
};
// class Solution {
// public:
// int wiggleMaxLength(vector<int>& nums) {
// if (nums.size() <= 1) return nums.size();
// int curDiff = 0; // 当前一对差值
// int preDiff = 0; // 前一对差值
// int result = 1; // 记录峰值个数,序列默认序列最右边有一个峰值
// for (int i = 0; i < nums.size() - 1; i++) {
// curDiff = nums[i + 1] - nums[i];
// // 出现峰值
// if ((preDiff <= 0 && curDiff > 0) || (preDiff >= 0 && curDiff < 0)) {
// result++;
// preDiff = curDiff; // 注意这里,只在摆动变化的时候更新prediff
// }
// }
// return result;
// }
// };
53.最大子序和
代码如下:暴力解法,贪心算法和动态规划
// class Solution {
// public:
// int maxSubArray(vector<int>& nums) { //方法一:暴力解法
// int max_value = INT32_MIN;
// for (int i = 0; i < nums.size(); i++) {
// int sum = 0;
// for (int j = i; j < nums.size(); j++) {
// sum += nums[j];
// if (sum > max_value) {
// max_value = sum;
// }
// }
// }
// return max_value;
// }
// };
class Solution {
public:
int maxSubArray(vector<int>& nums) { //方法二:贪心算法
int result = INT32_MIN;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
count += nums[i];
if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)
result = count;
}
if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
}
return result;
}
};
// class Solution {
// public:
// int maxSubArray(vector<int>& nums) { //方法三:动态规划
// int max_ending_here = nums[0];
// int max_so_far = nums[0];
// for (int i = 1; i < nums.size(); i++) {
// max_ending_here = max(nums[i], max_ending_here + nums[i]); //局部最大值
// max_so_far = max(max_so_far, max_ending_here); //全局最大值
// }
// return max_so_far;
// }
// };
今毕。