455.分发饼干
class Solution {
public:
// 时间复杂度:O(nlogn)
// 空间复杂度:O(1)
// 大饼干先喂饱大胃口
int findContentChildren1(vector<int>& g, vector<int>& s) {
// 将饼干数组和小孩数组分别排序
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int index = s.size() - 1;
int result = 0;
// 从后往前遍历
for (int i = g.size() - 1; i >= 0; i--) {
if (index >= 0 && s[index] >= g[i]) {
result++;
index--;
}
}
return result;
}
// 小饼干先喂饱小胃口
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int index = 0;
// 从前往后遍历
for (int i = 0; i < s.size(); ++i) {
if (index < g.size() && g[index] <= s[i]) {
index++;
}
}
return index;
}
};
376. 摆动序列
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
preDiff = curDiff;
}
}
return result;
}
};
53. 最大子序和
全为-1时,答案为-1.
class Solution {
public:
// 暴力解法
// 时间复杂度:O(n^2)
// 空间复杂度:O(1)
int maxSubArray1(vector<int>& nums) {
int result = INT32_MIN;
int count = 0;
for (int i = 0; i < nums.size(); ++i) {
count = 0;
for (int j = i; j < nums.size(); ++j) {
count += nums[j];
result = count > result ? count : result;
}
}
return result;
}
// 贪心算法
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;
}
};
int main() {
vector<int> nums(8,-1);
Solution s1;
int result = s1.maxSubArray(nums);
cout << result << endl;
}