贪心算法.

news2024/10/7 5:51:26
序幕

贪心算法(Greedy Algorithm)是一种在求解问题时采取逐步构建解决方案的策略,每一步都选择当前状态下局部最优的解,期望通过局部最优解能够得到全局最优解。

以上为了严谨性,引用了官方用语。
而用大白话总结就是:

从局部最优解,推至总体最优解
从局部规律,推至总体规律


很多时候,道理是苍白无力的。所以…

上题目

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

  • 例如,
    [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。
  • 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
    子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。
    给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

在这里插入图片描述
面对这些,是不是有点茫然而不知所措
上代码:

	// 核心代码,我将其包装在函数之中
	
    int wiggleMaxLength(vector<int>& nums) {
    
        int flag=nums.size(); // 长度
        if(flag>=2&&nums[0]==nums[1]) flag--;
        
        string str="";
        for(int i=0; i<nums.size(); ++i){
            if(i>1){
                int diff=nums[i-1]-nums[i-2];// 比较前两个数的大小
                
                if(diff>0) str="+";	// 得到的是一个趋势
                else if(diff<0) str="-";
					
				// 根据趋势,获得相应答案
                if((diff>0||str=="+")&&nums[i]>nums[i-1]) flag--;
                else if((diff<0||str=="-")&&nums[i]<nums[i-1]) flag--;
                else if(nums[i]==nums[i-1]) flag--;
  
            }
        }
        
        return flag; 
    }
	// 若没看懂,也不碍事,看了下方的图,你一定能明悟。 

什么是规律?刚刚在代码中,好像没什么局部最优呀,哈哈,大家看看下图,
,从 (5->10->13->15 )这段局部中,我把10,13叉掉说明什么,这就是规律!
我们需要是,各种峰值,当数字处于上升阶段时,若不止一个数字,就要将其去掉
在这里插入图片描述

小结

其实,简单的说,贪心算法就像是 从局部,找到一个规律,并且这个规律适用于全局
一但明白这点,无论难度多大的题,我们都会怀着 勇气,去寻找规律
而非像无头苍蝇一样乱撞,摸不到东西南北

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具

您是否对 iPhone 运营商的网络感到困惑&#xff1f;不用担心&#xff0c;我们将向您介绍 8 大免费 iPhone 解锁服务。这些工具可以帮助您移除 iPhone 上的网络锁&#xff0c;并使您能够永久在网络上使用您的设备。如果您想免费解锁 iPhone&#xff0c;请阅读本文并找到最适合您…

APC论文总结

论文详情 论文标题&#xff1a;APC: Adaptive Patch Contrast for Weakly Supervised Semantic Segmentation 论文作者&#xff1a;Wangyu Wu&#xff0c;Tianhong Dai&#xff0c;Zhenhong Chen&#xff0c;Xiaowei Huang&#xff0c;Fei Ma&#xff0c;Jimin Xiao 发表时间…

股票期货高频数据获取方法

导语&#xff1a;在量化交易领域&#xff0c;获取高质量的股票期货高频数据是进行有效分析和策略开发的基础。本文从专业量化角度出发&#xff0c;介绍了几种获取股票期货高频数据的方法。一、使用专业数据供应商1. 【推荐】**银河数据库&#xff08;yinhedata.com&#xff09;…

【Blender Python】6.修改物体模式

概述 Blender对象共有6种编辑模式&#xff0c;物体模式、编辑模式、雕刻模式、顶点绘制、权重绘制和纹理绘制。 在Blender Python中通过bpy.ops.object的mode_set()方法可以修改物体的编辑模式。只需要传入相应的mode参数就行了。 让物体进入编辑模式 >>> bpy.ops.…

leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点

删除链表的倒数第N个结点 题目要求题目示例解题思路从题目中的已知出发思考寻找目标结点条件转换核心思路 需要注意的点改进建议 完整代码提交结果 题目要求 给你一个链表&#xff0c;删除链表的倒数第n个结点&#xff0c;并且返回链表的头结点。 题目示例 示例 1&#xff1…

libcurl网络协议库使用Demo

目录 1 libcurl简介 2 libcurl编译 3 使用步骤 4 函数说明 4.1 全局初始化函数 curl_global_init 4.2 全局释放函数 curl_global_cleanup 4.3 libcurl库版本 curl_version 4.4 开启会话 curl_easy_init 4.5 结束会话 curl_easy_cleanup 4.6 设置传输选项 curl_easy_se…

最新版快递小程序源码 独立版快递系统 附教程

懂得都懂&#xff0c;现在电商平台退换货量大&#xff0c;快递需求量大&#xff0c;对接物流一个单子4块到6块之间 其中间是例如润 其余的 就不说了吧 互站上买的源码 分享一下 还有个方法赚钱就是 拼多多退货自己邮寄 5块钱 运费自己填写12元 白捡7元美滋滋 源码下载&…

Vivado - JTAG to AXI Master (GPIO、HLS_IP、UART、IIC)

1. 简介 本文分享 JTAG to AXI Master IP Core 的使用教程。 此 IP 用于 AXI 接口向设计输入数据&#xff0c;或者读取数据。通过 Tcl 控制台编写命令来驱动此 IP&#xff0c;通过 JTAG 即可进行操作&#xff0c;而这个 IP 则在 AXI 端口上驱动 AXI 事务。由于这个核心没有自…

面试题之- null和undefined的区别

前言 首先undefined和null都是基本数据类型&#xff0c;这两个基本数据类型分别都只有一个值&#xff0c;就是undefined和null。 undefined代表的含义是未定义&#xff0c;null代表的的含义是空对象&#xff0c;一般变量声明了但是还有没有定义的时候会返回undefined&#xf…

每日学习一个数据结构-默克尔树(Merkle Tree)

文章目录 概述特征构建过程使用场景示例总结 设计目的一、提高数据验证效率二、增强数据安全性三、适用于分布式系统 底层原理一、数据块划分与哈希计算二、二叉树的构建三、默克尔树的应用与优势 更新机制 概述 默克尔树&#xff08;Merkle Tree&#xff09;&#xff0c;也称…

cnn突破六(四层bpnet网络公式)

四层bpnet网络反向传播公式推导&#xff1a; X【196】-》HI【128】/HO【128】-》H2I【60】/H2O【60】-》YI【10】/YO【10】&#xff0c; 期望是d【10】 X&#xff0c;HI之间用w1【196&#xff0c;128】 HO&#xff0c;H2I之间用w12【128,60】 H2O&#xff0c;YI之间用w2【…

Zabbix 企业级应用(Zabbix Enterprise Application)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【AI学习】Mamba学习(三):离散化SSM的矩阵计算

SSM离散化表示 除了连续的输入之外&#xff0c;还会通常碰到离散的输入(如文本序列)。所以SSM需要离散化形式&#xff0c;就是下面公式2和3。 SSM离散化过程 但是好奇这个离散化过程是如何进行的&#xff1f; 《一文通透想颠覆Transformer的Mamba&#xff1a;从SSM、HiPPO、…

【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解

目录 1、NIO 2、NIO 和 IO 的区别 1. 阻塞 vs 非阻塞 2. 一个线程 vs 多个连接 3. 面向流 vs 面向缓冲 4. 多路复用 3、Channel & Buffer (1&#xff09;Channel&#xff1a;双向通道 (2&#xff09;Buffer&#xff1a;缓冲区 (3&#xff09;ByteBuffer&#xff…

GO网络编程(五):海量用户通信系统3:整体框架与C/S通信总体流程【重要】

这个系统其实是尚硅谷的老韩讲的&#xff08;尚硅谷网络编程项目&#xff09;&#xff0c;但是他讲得很碎片化&#xff0c;思路不够清晰&#xff0c;时间又长&#xff0c;所以要掌握还是挺难的。如果你听了他的视频&#xff0c;不去梳理系统业务流程&#xff0c;不去看代码就往…

云计算身份认证与访问控制(Cloud Computing Identity Authentication and Access Control)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

支持向量机(SVM)基础教程

一、引言 支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;是一种高效的监督学习算法&#xff0c;广泛应用 于分类和回归分析。SVM以其强大的泛化能力、简洁的数学形式和优秀的分类效果而备受机器学 习领域的青睐。 二、SVM基本原理 2.1 最大间…

watch命令:周期执行指定命令

一、命令简介 ​watch ​命令用于周期性地执行指定的命令&#xff0c;并显示其输出结果。 ‍ 二、命令参数 2.1 命令格式 watch [选项] 命令2.2 选项 ​-n, --interval​: 指定更新间隔时间&#xff08;以秒为单位&#xff09;。默认间隔时间为 2 秒。​-d, --difference…

数学与生活

多学科交叉 信号处理 小波 经济 政策 计算机 统计 信号处理与市场分析 经济与数据分析 政策与统计 过去的数学家没有一个是纯粹的数学家&#xff1b;生活中各方面工程的&#xff0c;物理的&#xff0c;天文&#xff0c;地理的&#xff0c;赌博&#xff0c;政治的&#xff1b…

删除AlibabaProtect

首先管理员运行cmd 然后执行下行 sc delete AlibabaProtect重启电脑&#xff0c;再删除该文件夹C:\Program Files (x86)\AlibabaProtect