贪心算法核心思路
贪心算法的核心在于局部最优推导全局最优,但这往往需要经验积累。通过几道经典题目,我们可以更直观地理解这种策略在实际编码中的应用。
LeetCode 376. 摆动序列
这道题要求找出最长的摆动子序列。所谓摆动序列,就是相邻元素的差值正负交替。为了得到最长序列,我们在每一步选择时都应尽可能让当前极值点成为波峰或波谷,这样后续的选择空间才最大。

看上面的图,假设在 c 和 d 之间选了一个非极值点 x1,那么后续可能就无法满足摆动条件了。这就是为什么我们要选极值点的原因。代码实现上,我们可以通过比较相邻元素的差值符号变化来判断极值点位置。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int left = 0;
int right = 0;
int sz = nums.size();
int ret = 0;
// 特判边界情况
if (sz == 1 || (sz == 2 && nums[0] == nums[1])) return 1;
if ((nums[0] == nums[sz - 1]) && (nums[0] == nums[sz / 2])) return 1;
for (int i = 0; i < sz - 1; ++i) {
right = nums[i + 1] - nums[i];
if (!right) continue;
((left * right) < ) {
ret++;
}
left = right;
}
ret + ;
}
};





