贪心算法

一、分发饼干(LeetCode 455)

题目:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
注意:
你可以假设胃口值为正。
一个小朋友最多只能拥有一块饼干。
思路:
在这里插入图片描述
代码:

class Solution
{
public: 
	int findcontentchildren(vector<int>& g, vector<int>& s)
	{
		sort(g.begin(),g.end());//将满足因子按照从小到大的顺序排列
		sort(s.begin(),s.end());//将饼干数目按从小到大的顺序排列
		int child=0;//初始孩子个数为零
		int candy=0;//糖果也为零
		while(child < g.size() && candy < s.size())//当饼干数目和满足因子都没有遍历完的情况下才能继续遍历
		{
			if(g[child] <= s[candy])//如果满足因子小于饼干数目,则可以满足,孩子数加1
			{
				child++;
			}
			candy++;//无论能不能满足糖果都加1
		}
		return child;
	}
};

一、摇摆序列(LeetCode 376)

题目
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。
思路
在这里插入图片描述在这里插入图片描述
代码

#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
class Solution
{
public:
	int wiggleMaxLenth(vector<int>& nums)
	{
		if(nums.size() < 2)//若数字个数小于2,最长摇摆序列即为数组大小
		{
			return nums.size();
		}
		static const int BEGIN=0;//初始状态
		static const int UP = 1;//上升状态
		static const int DOWN = 2;//下降状态
		int STATE = BEGIN;
		int max_length = 1;

		for(int i=1;i<nums.size();i++)//遍历数组中的所有数字,从第二个数字开始遍历
		{
			switch(STATE)    
			{
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值