贪心算法(局部最优实现全局最优)第二篇

贪心算法(局部最优实现全局最优)第二篇

目录

1. LeetCode376. 摆动序列

2. LeetCode334. 递增的三元子序列

3. LeetCode674. 最长连续递增序列

4. LeetCode121. 买卖股票的最佳时机


今天我们继续来聊聊贪心算法,因为我在前面也说过贪心算法最重要的就是经验,所以我们今天继续通过刷题的方式来学习贪心算法。

1. LeetCode376. 摆动序列

这道题的意思其实也比较好理解的,就是求一个最长的摆动序列,可以从原数组中删除不符合条件的数。

这道题的话我们先来聊一下思路,因为要求的是最长的子数组。根据题目要求那么是不是说我们每次选的数字都要在有限的分为里面做到尽可能的大或者尽可能的小。为什么要这么做呢?是因为但我们选到最值的时候我们在后面的选择中才可以有更多的选择。

我们看下面这个图,里面有abcdef这几个极值点。我们看,在c和d之间有一个点x1,假设我们在这里选择了这个点的话,那么后面的数都选不了了,因为接下来是要选择比x1小的数。这也是为什么我们每一次都要选择最值的原因。

那么我们代码该怎么设计呢?我们就可以试用一个三指针,通过比较的这三个指针的大小的方式来确定极值点的位置。或者我们也可以观察一下下面这张图,以b点为例子,我们通过后面的点减去前面的点的方式,b减去ab上面的点都是正数,而bc上面的点减去b都是负数,而如果是一个非极值点的话,则都是正数,通过这样的方式我们就得到了极值点,接下来我们就使用这个方式来编写代码。

我们看下面这个代码,前面两个if条件判断都是用来特判的。同时因为原数组里面的值是可能连续好几个相同的,所以我们在这里是需要if判断的,如果相同那么就直接跳过。最后的答案之所以需要+2也是因为我们在这样判断的时候是没有加上两边的端点的,所以我们在这里需要加上。

class Solution { public: int wiggleMaxLength(vector<int>& nums) { int left=0; int right=0; int sz=nums.size(); int ret=0; if(sz==1||(sz==2&&(nums[0]==nums[1]))) return 1; if((nums[0]==nums[sz-1])&&(nums[0]==nums[sz/2])) return 1; for(int i=0;i<sz-1;++i) { right=nums[i+1]-nums[i]; if(!right) continue; if((left*right)<0) { ret++; } left=right; } return ret+2; } };

2. LeetCode334. 递增的三元子序列

这道题的话就比较简单,就是要求我们判断原数组里面有没有三个数是呈现递增关系的,有的话就返回true,没有的话就返回false。

这道题的思路其实挺好想到的,就是在代码编写的时候不要写错了就好。这道题的解法有点像我上面说的三指针。简单来说就是几个判断就好了。

可是这道题使用到了贪心吗?答案是Yes。因为我们的代码有一个思想,那就是每一次判断都在进行筛选,我们都在尽可能的让a和b变小,这样方便我们找到合适的点。

class Solution { public: bool increasingTriplet(vector<int>& nums) { int a=nums[0]; int b=INT_MAX; int sz=nums.size(); for(int i=1;i<sz;++i) { if(nums[i]>b) return true; if(a>nums[i]) a=nums[i]; else if(nums[i]!=a) b=nums[i]; else continue; } return false; } };

3. LeetCode674. 最长连续递增序列

这道题的话比较简单,就是叫我们从原数组里面找到最长的递增子数组,同时要求是连续的。

这道题的话就比较简单了,就是从头到尾遍历一遍就好,同时记录最大的ret就可以了。

class Solution { public: int findLengthOfLCIS(vector<int>& nums) { int ret=1; int ret1=1; int sz=nums.size(); for(int i=0;i<sz-1;++i) { if(nums[i+1]>nums[i]) ret1++; else ret1=1; if(ret1>ret) ret=ret1; } return ret; } };

4. LeetCode121. 买卖股票的最佳时机

这道题的话也是比较简单的,就是要求我们在原数组里面找到两数之差最大的那两个数。

所以说这道题的话我们就是通过一次遍历然后同时用一个l来不断更新最小值,这样我们就可以取到最大的数了。

这道题贪心的地方在于l一直在更新,在不断地变小。

class Solution { public: int maxProfit(vector<int>& p) { int sz=p.size(); int ret=0; int ret1=0; int l=INT_MAX;//买 for(int i=0;i<sz;++i) { if(l<p[i]) ret=max(ret,p[i]-l); if(l>p[i]) l=p[i]; } return ret; } };

Read more

阿里开源的Z-Image-Turbo,教你本地docker部署,无限生成无水印图片,3090就可以部署

阿里开源的Z-Image-Turbo,教你本地docker部署,无限生成无水印图片,3090就可以部署

一、环境 1.操作系统:ubuntu24 2.显卡:RTX3090 24G 3.已经安装了docker和安装并配置 nvidia-container-toolkit 二、模型下载 1.到modelscope社区找到Tongyi-MAI/Z-Image-Turbo,点击“模型文件”,再点击“下载模型”,如下图 官方链接: https://modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo/files?version=master 2.然后选择一个下载方式就行,如图 3.下载成功如下图 三、新建2个运行所需文件 1.新建python文件,名字为:zimage_server.py,代码如下: 注: 可以根据自己的实际情况修改端口,分辨率等。 import

2026年文生图模型趋势入门必看:Z-Image-Turbo开源+高分辨率生成实战指南

2026年文生图模型趋势入门必看:Z-Image-Turbo开源+高分辨率生成实战指南 你有没有想过,只需一句话描述,就能生成一张接近专业摄影水准的高清图像?而且整个过程只要9步、不到10秒?这不是未来科技,而是现在就能用上的现实工具。 今天要介绍的主角是阿里达摩院在ModelScope上开源的 Z-Image-Turbo ——一款专为高速高质量图像生成设计的文生图大模型。它不仅支持1024x1024分辨率输出,还能在高端显卡上实现“秒级出图”,更重要的是,我们已经为你准备好了一键可用的完整环境镜像,预置了全部32.88GB权重文件,真正做到了开箱即用。 无论你是AI绘画爱好者、设计师,还是想探索AIGC应用的产品开发者,这篇文章都会带你从零开始,快速掌握Z-Image-Turbo的核心能力,并亲手跑通第一个高分辨率图像生成任务。 1. Z-Image-Turbo 是什么?为什么值得关注? 1.1 一个重新定义“快”与“好”的文生图模型 在过去几年里,Stable Diffusion系列主导了文生图领域,但它们普遍需要20~50步推理才能获得理想效果,耗时长、资源占用高。

Idea VScode Git 标准操作规范,更新代码、提交代码、切换分支、合并分支、暂存代码、回滚代码、创建分支、打 Tag 标签

Idea VScode Git 标准操作规范,更新代码、提交代码、切换分支、合并分支、暂存代码、回滚代码、创建分支、打 Tag 标签

一、Idea Git 标准操作规范 1、更新代码 2、提交代码 3、切换分支 4、合并分支 5、暂存代码 6、回滚代码 7、创建分支 8、打 Tag 标签 二、VScode Git 标准操作规范 1、更新代码 2、提交代码 3、切换分支 4、合并分支 5、暂存代码 6、回滚代码 7、创建分支 8、打 Tag 标签 三、为什么总结这个手册 📝 前言:全场景协同,构建统一的版本控制规范 在现代软件开发中,

GitHub Actions Windows Server 2022运行环境:2025年终极配置指南

GitHub Actions Windows Server 2022运行环境:2025年终极配置指南 【免费下载链接】runner-imagesactions/runner-images: GitHub官方维护的一个仓库,存放了GitHub Actions运行器的镜像文件及相关配置,这些镜像用于执行GitHub Actions工作流程中的任务。 项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images 在当今快速发展的软件开发领域,高效的持续集成环境已成为项目成功的关键因素。GitHub Actions Windows Server 2022运行环境为开发者提供了一个功能齐全、开箱即用的解决方案,让您能够专注于核心业务逻辑而非环境配置。本文将为您详细介绍如何快速搭建和优化这一强大的开发环境。 Windows Server 2022环境的核心优势 最新版本的Windows Server 2022运行环境基于操作系统版本10.0.20348 Build 4297,镜像版本为20251102.87.1。这个预配置的环境包含