代码随想录打卡第31天455. 分发饼干 376. 摆动序列 53. 最大子数组和

455. 分发饼干

题目链接:https://leetcode.cn/problems/assign-cookies/

算法思想:采用贪心算法实现。

将两个数组进行排序,为每个饼干找到一个合适的胃口,找到就+1。

class Solution {

public:

    int findContentChildren(vector<int>& g, vector<int>& s) {

        sort(g.begin(), g.end()); //小孩子的胃口

        sort(s.begin(), s.end());

        int j = g.size()-1;

        int result = 0;

        for(int i = s.size()-1; i>=0;i--) //为每块饼干找打一个合适的胃口

        {

            while(j>=0&&s[i]<g[j])//如果饼干小于小孩子的胃口

            {

                j--;

            }

            if(j>=0) //说明找到了,result记录+1,j移动一个位置开始找

            {

                result++;

                j--;

            }

        }

        return result;

    }

};

376. 摆动序列

算法思想:可以用坡来模拟这个过程。坡度有变化的地方,计数+1。

result初始值设置为1,计算前后的坡度差。第一个元素,前面没有值,可以将prediff设置为0进行计算。

class Solution {

public:

    int wiggleMaxLength(vector<int>& nums) {

        //计算有多少个破

        int result = 1;

        int prediff = 0;

        int curdiff = 0;

        for(int i=0;i<nums.size()-1; i++)

        {

            curdiff = nums[i+1] - nums[i];

            if(curdiff>0&&prediff<=0 || curdiff<0&&prediff>=0)

            {

                result++;

                prediff = curdiff;

            }


        }

        return result;

    }

};

53. 最大子数组和

题目链接:https://leetcode.cn/problems/maximum-subarray/

算法思想:

sum记录当前的和,如果当前的和大于最大和,更新最大和。当当前的和小于0时,重新开始计数。

class Solution {

public:

    int maxSubArray(vector<int>& nums) {

        int maxsum = INT_MIN;

        int sum = 0;

        for(int i=0;i<nums.size();i++)

        {

            sum = sum+nums[i];

            if(sum>maxsum)

                maxsum = sum;

            if(sum < 0)

                sum = 0; //如果sum小于0了,那么抛弃它重新来

        }

        return maxsum;

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容