【代码随想录】【算法训练营】【第31天】 [455]分发饼干 [376]摆动序列 [53]最大子序和

前言

思路及算法思维,指路 代码随想录

题目来自 LeetCode

day 31,放假前的周五,总是令人激动的~

题目详情

[455] 分发饼干

题目描述

455 分发饼干

解题思路

前提:

思路:贪心算法,小饼干优先满足较小胃口。

重点:局部最优解,叠加整体最优解。

代码实现

C语言
排序后,小饼干优先小胃口
c 复制代码
int cmp(void *p1, void *p2)
{
    return (*(int *)p1 > *(int *)p2);
}

int findContentChildren(int* g, int gSize, int* s, int sSize) {
    if ((gSize == 0) || (sSize == 0)) {
        return 0;
    }
    // 排序
    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);

    // 小饼干满足小胃口孩子
    int sLoc = 0;
    int gLoc = 0;
    int count = 0;
    while ((gLoc < gSize) && (sLoc < sSize)) {
        if (g[gLoc] <= s[sLoc]) {
            // 满足胃口,分配
            gLoc++;
            count++;
        }
        sLoc++;
    }
    return count;
}

[376] 摆动序列

题目描述

376 摆动序列

解题思路

前提:差值正负交替出现,即出现山峰或低谷

思路:判断峰值的个数

重点:注意平坡,尤其是首尾位置,影响序列长度。

代码实现

C语言
寻找峰值个数,注意平坡
c 复制代码
int wiggleMaxLength(int* nums, int numsSize){
	// 初始化为1,默认首位前为平坡
    int length = 1;
    int prediff = 0;
    int curdiff = 0;
    for (int i = 0; i < numsSize - 1; i++) {
        int curdiff = nums[i + 1] - nums[i]; 
        // 判断是否为符合要求的山峰或低谷
        if (((prediff >= 0) && (curdiff < 0)) || ((prediff <= 0) && (curdiff > 0))) {
            length++;
            // 出现峰值时更新prediff
            prediff = curdiff;
        }
    }
    return length;
}

[53] 最大子序和

题目描述

53 最大子序和

解题思路

前提:连续子数组的和的最大值

思路:负数与任何数值相加,只会使值变的更小,所以当当前和为负数时,抛弃该和,重新计算。

重点:贪心算法思维。

代码实现

C语言
连续和为负数时,抛弃当前连续子数组和
c 复制代码
int maxSubArray(int* nums, int numsSize) {
    int sum = 0;
    int slow = 0;
    int fast = 0;
    int maxSum = -10001;
    while (fast < numsSize) {
        // 连续和为负数时,抛弃当前连续子数组和
        if (sum < 0) {
            sum = 0;
        }
        sum += nums[fast];
        // 取最大和
        if (sum > maxSum) {
            maxSum = sum;
        }
        fast++;
    }
    return maxSum;
}

今日收获

  1. 贪心算法思维方式。
相关推荐
清酒难咽3 小时前
算法案例之递归
c++·经验分享·算法
让我上个超影吧4 小时前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
张张努力变强4 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-5 小时前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
钱彬 (Qian Bin)5 小时前
项目实践19—全球证件智能识别系统(优化检索算法:从MobileNet转EfficientNet)
算法·全球证件识别
feifeigo1235 小时前
基于EM算法的混合Copula MATLAB实现
开发语言·算法·matlab
漫随流水5 小时前
leetcode回溯算法(78.子集)
数据结构·算法·leetcode·回溯算法
IT猿手6 小时前
六种智能优化算法(NOA、MA、PSO、GA、ZOA、SWO)求解23个基准测试函数(含参考文献及MATLAB代码)
开发语言·算法·matlab·无人机·无人机路径规划·最新多目标优化算法
We་ct6 小时前
LeetCode 151. 反转字符串中的单词:两种解法深度剖析
前端·算法·leetcode·typescript
芜湖xin6 小时前
【题解-Acwing】AcWing 5579. 增加模数(TLE)
算法·快速幂