day31 代码随想录 分发饼干&摆动序列&最大子序和

2023-09-17 21:02:55

大纲

● 理论基础
● 455.分发饼干
● 376. 摆动序列
● 53. 最大子序和

455.分发饼干

题目:455.分发饼干

// 分发饼干
// 有数组g代表胃口大小,数组s代表饼干大小
// 求满足最多胃口的值
// 思路是对g s排序
// 优先选择最大的饼干满足最大的胃口
// [1,2,3] [1,1]
int fitChildVal(vector<int>& g, vector<int>& s)
{
    sort(g.begin(), g.end());
    sort(s.begin(), s.end());

    int index = s.size() - 1, count = 0;
    for (int i = g.size() - 1; i >= 0; --i) {
        if (index >= 0 && s[index] >= g[i]) {
            index--;
            count++;
        }
    }
    return count;
}

376. 摆动序列

题目:376. 摆动序列

// 给定一个数组arr,判断里面是摆动序列组合的最大长度
// 思路是计算相邻数据的差形成一个数组,然后删除相邻同符号的值
// 返回剩下数组长度+1
// 可以优化为一个变量统计和一个变量记录上一个值,减少空间复杂度
// 忘记处理val为0的情况了
int maxUpDownArrayLength(vector<int>& nums) {
//    vector<int> plusVec;
    int lastVal = 0;
    int count = 0;
    for (int i = 1; i < nums.size(); ++i) {
        int val = nums[i] - nums[i - 1];
        if (val == 0) continue;
        if (count !=0 && lastVal > 0 && val > 0)
            continue;
        if (count !=0 && lastVal < 0 && val < 0)
            continue;
        lastVal = val;
//        plusVec.push_back(val);
        count++;
    }

    return count + 1;
}

53. 最大子序和

题目:53. 最大子序和

// 最大子数组和
// 遍历所有种可以的子数组,分别统计最大和 取最大值
// O(n ^ 2)时间复杂度

// 用递归吧
// 结束条件是抵达最后元素值
// 参数是开始的元素下标
// 循环体,遍历元素
//
// 但是行不通,原因在于递归使其遍历了所有组合可能,而不是仅仅相邻的
int maxSum = INT_MIN;
void _maxSub(vector<int>& nums, int& pathSum, int startIndex)
{
    if (startIndex >= nums.size()) return;
    if (maxSum < pathSum)
        maxSum = pathSum;

    for (int i = startIndex; i < nums.size(); ++i) {
        pathSum += nums[i];
        _maxSub(nums, pathSum, i + 1);
        pathSum -= nums[i];
    }
}

int maxSubArraySum(vector<int>& nums) {
    int pathSum = 0;
    _maxSub(nums, pathSum, 0);
    return maxSum;
}

总结

贪心的解法比较难想到解决办法,也没有太多规律,需要自己多熟悉

更多推荐

线程池使用之自定义线程池

目录一:Java内置线程池原理剖析二:ThreadPoolExecutor参数详解三:线程池工作流程总结示意图四:自定义线程池-参数设计分析1:核心线程数(corePoolSize)2:任务队列长度(workQueue)3:最大线程数(maximumPoolSize)4:最大空闲时间(keepAliveTime)五:自

unity 使用声网(Agora)实现语音通话

第一步、先申请一个声网账号[Agora官网链接](https://console.shengwang.cn/)第二步在官网创建项目,选择无证书模式,证书模式需要tokenh和Appld才能通话第三步官网下载SDK然后导入到unity,也可以直接在unity商店里下载,Agora官网下载链接第四步运行官方Demo1、导入

提取数据和标签

提取数据和标签是指从给定的文本或数据集中提取出有用的信息和相应的标签。数据提取可以用于从结构化或非结构化的数据源中抽取所需的数据。例如,从表格中提取特定的字段值、从网页中提取关键词或从文本中提取实体或关系。标签提取是指从文本或数据中确定或推断出所需的类别或标签。这可以是一个二分类问题(如判断一封电子邮件是否为垃圾邮件)

SpringMVC常用注解

除了@PathVaribale请求方式的不同,要用在方法上,其他注解都用在参数上@RequestMapping,@ResponseBody既可以注解在类上,也可以注解到方法上。目录一.@RequestParam二.@RequestBody三.@PathVaribaleRestful风格Restful风格如何实现缓存机制

新能源汽车运行安全性能检验规程需要哪些CAN数据才符合标准

新能源汽车的前生命周期包括了整车制造、使用、转让市场及报废回收这几个主要阶段,在政策大力扶持下,国内新能源汽车的制造产业链完善,补贴培育市场取得丰硕的果实。目前来说,我国新能源汽车有着技术领先、设计先进、低成本优势,在全球范围内都具备很大的吸引力。纯电动汽车及电车技术的出现和发展,实现了国内新能源汽车弯道超车,跨越了百

Opencv之区域生长和分裂

区域生长1.基本原理区域生长法是较为基础的一种区域分割方法它的基本思想我说的通俗些,即是一开始有一个生长点(可以一个像素也可以是一个小区域),从这个生长点开始往外扩充,扩充的意思就是它会把跟自己有相似特征的像素或者区域拉到自己的队伍里,以此壮大自己的势力范围,每次扩大后的势力范围就是一个新的生长点,一直生长一直生长,直

Matlab进阶绘图第30期—冲击图

冲击图是一种特殊的堆叠柱状图。与堆叠柱状图相比,冲击图添加了相邻柱子中相同组分之间的连线,可以更加清晰地表达各组分占比情况。由于Matlab中未收录冲击图的绘制函数,因此需要大家自行解决。本文使用自制的Fbarstacked小工具进行冲击图的绘制,先来看一下成品效果:特别提示:本期内容『数据+代码』已上传资源群中,加群

cmake:target属性POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDENT_CODE的区别

cmake定义的target有两个名字类似的属性:POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDENT_CODE,本文说明它们的含义和区别-fPIC介绍POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDE

matlab读写json文件

Background通常,在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型,包括数字、矩阵、向量、结构体、字符和函数等。但是,当和其他语言有交互时,mat文件会不太方便。而json格式在许多编程语言中,包括MATLAB,都有提供解析和创建

【LQR】离散代数黎卡提方程的求解,附Matlab/python代码(笔记)

LQR的核心是设计QRN,并求解对应的黎卡提方程对于连续状态空间方程系统,先求连续LQR后离散和先离散后求离散LQR方程的结果是不一样的1.离散代数黎卡提方程注:LQR算法中含N项离散系统:在matlab里有现成的函数dlqr(),但为了搞清楚其内核,编写matlab代码展示其求解过程matlab帮助文件里的dlqr(

淘宝拍立淘插件转链和商业化图片生成接口介绍,图片搜索商品接口,按图搜索接口,图片识别商品接口介绍

淘宝拍立淘是淘宝网推出的一种搜索方式,通过拍立淘,用户可以输入文字描述或上传图片来搜索商品。拍立淘通过与淘宝网进行数据接入和授权,使用淘宝提供的API获取商品信息和操作权限,拍立淘使用图像识别技术,通过深度学习算法和计算机视觉技术,对用户拍摄的商品照片进行识别,拍立淘插件转链API用于为淘宝客提供开启拍立淘插件(根据图

热文推荐