一、分发饼干(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)
{