【贪心算法初级训练】在花坛上是否能种下n朵花、碰撞后剩余的行星

1、在花坛上是否能种下n多花

一个很长的花坛,一部分地已经种植了花,另一部分却没有,花不能种植在相邻的地块上否则它们会争夺水源,两者都会死去。给你一个整数数组表示花坛,由若干个0和1组成,0表示没种植花;1表示种植了花。

给定一个数n,请设计一个算法验证在该花坛上能不能种下n朵花?

仅需判断要种花的位置, 和它的左位置,右位置已经有花的情况,再下来就是要注意访问数组时索引的范围要在数组范围内。

class Solution
{
public:
	bool canPlantFlower(int* a, int size, int n)
	{
		int i = 0;
		int count = 0;
        if (0 == n)//这里我们考虑一下在花坛上种0多花的情况!
            return true;
		while(i < size)
		{
			if (i - 1 > 0 && 1 == a[i - 1])//先判断要种花位置的左边有花的情况
				i += 1;
			else if (1 == a[i])//判断要种花的位置有花的情况
				i += 2;
			else if (i + 1 < size && 1 == a[i + 1])//判断要种花的位置右边有花的情况
				i += 3;
			else
			{
				a[i++] = 1;
				count++;
				if (n == count)
					return true;
			}
		}
		return false;
	}
};

2、碰撞后剩余的行星

给定一个整数数组,表示在同一行的行星。每一个元素的绝对值表示行星的大小,正负号表示行星的移动方向,正表示向右移动;负表示向左移动,每一颗行星以相同的速度移动。

行星碰撞规则:

1.两行星碰撞,较小的行星会爆炸。

2.如果大小相同,则两行星都爆炸。

3.两颗移动方向相同的行星,永远不会发生碰撞。

请设计一个算法,表示出最后剩余的行星。

 对于这道题我的思路是:

1.首先我们先从数组的0位置开始对数组元素进行两两判断,只判断行星爆炸的情况,将爆炸的行星值改为0,第一遍将数组遍历完后,此时还没有结束!数组还剩下没有发生爆炸的行星。

2.遍历数组将没有发生爆炸的行星(即值!=0的行星)的值从头覆盖原数组的值(这里并没有创建新数组,只是对旧数组进行覆盖),覆盖后的数组里的值就是没有发生爆炸的行星,然后重复该过程,创建一个count变量用来作为循环终止判断。

class Solution
{
public:
	vector<int> existPlanet(int* array, int n)
	{
		int newn = n;//newn没有爆炸行星的个数
		int ni = 0;
		int count = 1;
		while (count > 0)
		{
			count = 0;
			ni = 0;
			int i = 0;
			while (i + 1 < newn)
			{
				if (array[i] > 0 && array[i + 1] < 0)//接下来只需要考虑两颗行星碰撞的情况
				{
					if ( array[i] + array[i + 1] < 0)//左行星爆炸
					{
						array[i++] = 0;
						count++;
					}
					else if (array[i] + array[i + 1] > 0)//右行星爆炸
					{
						array[i + 1] = 0;
						i++;
						count++;
					}
					else if (0 == array[i] + array[i + 1])//两颗行星都爆炸
					{
						array[i] = array[i + 1] = 0;
						i++;
						count++;
					}
				}
				else
					i++;
			}
			for (int j = 0;j < newn;j++)
			{
				if (array[j])
					array[ni++] = array[j];
			}
			newn = ni;
		}
		vector<int> v;
		for (int j = 0;j < newn;j++)
		{
			if (array[j])
				v.push_back(array[j]);
		}
		return v;
	}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

课程设计:班级通讯录管理系统(Java+MySQL)

本项目旨在开发一个基于Java的班级通讯录管理系统&#xff0c;使用MySQL作为数据库&#xff0c;采用Swing进行UI设计。系统主要功能包括管理员登录认证、班级信息管理、学生信息管理。每个班级拥有独立窗口&#xff0c;同时注重窗口复用和代码精简&#xff0c;实现自适应布局&a…

性价比高的洗地机推荐,测评员精选四款热门洗地机分享

家庭清洁新升级&#xff0c;家用洗地机可以让家里打扫变得轻松高效。面对众多品牌和型号&#xff0c;朋友们常犯难&#xff1a;到底应该怎么选家用洗地机&#xff1f;别急&#xff0c;我这回的普及知识可不含糊&#xff0c;亲测超十款热门洗地机&#xff0c;从中精挑细选了四款…

手机天线都去哪里了?

在手机的演变历程中&#xff0c;天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇&#xff0c;现在的手机为什么看不到那些曾经显眼的天线了呢&#xff1f; 让我们一起揭开这个谜题。 首先&#xff0c;让我们从基础开始&#xff1a;手机是如何发出电磁波的&…

摄像头劫持——保护自己免受窥探

今天为您带来当今科技界的最新趋势及探索方法。本周&#xff0c;我们将为您提供五个防止黑客在您不知情的情况下访问您的网络摄像头的建议。 网络摄像头 一、摄像头劫持 你是否曾经怀疑过&#xff0c;即使你没有主动使用网络摄像头&#xff0c;也可能有人正在通过它窥视你&am…

【码银送书第二十一期】《大数据智能风控:模型、平台与业务实践》

人行印发的《金融科技&#xff08;FinTech&#xff09;发展规划&#xff08;2022一2025年&#xff09;》明确指出金融科技成为防范化解金融风险的利器&#xff0c;运用大数据、人工智能等技术建立金融风控模型&#xff0c;有效甄别高风险交易&#xff0c;智能感知异常交易&…

关于创建虚拟机时kdump服务的简介

kdump 是一种先进的基于 kexec 的内核崩溃转储机制。 当系统崩溃时&#xff0c;kdump 使用 kexec 启动到第二个内核&#xff0c;这个内核通常被称为捕获内核。它以较小的内存启动&#xff0c;用于捕获转储镜像。 第一个内核会保留一部分内存给第二个内核启动使用。由于 kdump 利…

掌握JavaScript ES6精髓:探索函数和对象的高级扩展与实用技巧

序言 JavaScript&#xff0c;作为前端开发中不可或缺的语言&#xff0c;已经发展到了ECMAScript 2015&#xff08;简称ES6&#xff09;以及后续的版本。ES6带来了诸多语法上的改进和创新&#xff0c;使得代码更加简洁、优雅&#xff0c;同时也提供了更多的编程模式和实用技巧。…

MySQL客户端与服务端建立连接抓包分析

文章目录 MySQL客户端与服务端建立连接流程抓包分析1.连接建立流程2.各类数据包介绍2.1挑战数据包2.2认证数据包2.3切换认证插件请求数据包2.4切换认证插件响应数据包2.5成功数据包2.6失败数据包3.注意点4.测试代码MySQL客户端与服务端建立连接流程抓包分析 抓包工具采用的是W…

【AI副业指南】用AI做心理测试图文号,单月稳赚7000+(附详细教程)

大家好&#xff0c;我是画画的小强 因为AI的出现&#xff0c;很多自媒体副业项目变得简单容易上手&#xff0c;也给予很多想要在业余时间变现的朋友更丰富的项目选择。 今天分享的赛道绝对颠覆大家的认知&#xff0c;本期将叫大家如何通过AI在自媒体平台上做心理测试账号。 …

vue中实现百度地图全国与省市地图切换

前言 本文主要是用于示例全国地图&#xff0c;点击省市地图直接跳转到该省市地图并展示&#xff0c;可以拓展在地图上显示标记点&#xff08;本文未做示例&#xff09;&#xff0c;后续有完整代码&#xff0c;但是由于需要与本来项目业务代码进项分割&#xff0c;可能会有些问题…

nexus配置问题

错误信息&#xff1a; npm ERR! code E401 npm ERR! Unable to authenticate, need: BASIC realm"Sonatype Nexus Repository Manager"解决办法一&#xff1a; npm login --registryhttp://192.168.52.128:8081/repository/npm-repo 输入 用户名 密码 邮箱完成后会…

Tower 使用指南

Tower 使用指南 目录 打开 git 仓库查看分支历史切换分支提交修改推送修改创建标签自动拉取最新代码 打开 git 仓库 File -> Open然后选择项目目录 查看分支历史 切换分支 提交修改 推送修改 创建标签 自动拉取最新代码

aardio - 日历

写了个日历小例程&#xff0c;因 lunar 农历库存在问题&#xff0c;经过研究算是变相解决了&#xff0c;日历也完成了雏形&#xff0c;先开源出来&#xff0c;感兴趣的玩玩。 请下载最新paint库、customPlus库、lunar库。 不同的颜色搭配&#xff0c;实现不同的风格&#xff1…

WDG看门狗

一、WDG简介 1、WDG&#xff08;Watchdog&#xff09;看门狗 &#xff08;1&#xff09;看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入…

URLDNS利用链

利用链分析在我的Github主页 Java反序列化学习 下面写下POC思路 利用点HashMap的readObject private void readObject(java.io.ObjectInputStream s)throws IOException, ClassNotFoundException {// Read in the threshold (ignored), loadfactor, and any hidden stuffs.de…

JAVAWeb---- 数据库的简单了解

目录 1.什么是数据库 2.什么是数据库管理系统 3.什么是SQL 4.什么是关系型数据库 1.什么是数据库 用来存储和管理数据的“仓库”&#xff0c;简称DB(Database)&#xff1b; 2.什么是数据库管理系统 对数据库的一切操作都是在数据库管理系统进行的&#xff0c;比如MySQL&a…

Ollama深度探索:AI大模型本地部署的全面教程

目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…

【数据结构与算法】树的存储,森林 详解

树的几种存贮结构(双亲表示法、孩子表示法、孩子兄弟表示法)的优缺点&#xff0c;各自适应的运算。 双亲表示法&#xff1a; 优点&#xff1a;方便查找双亲及其祖先结点缺点&#xff1a; 查找孩子和兄弟结点比较费事未表示出结点之间的先后次序 适应的运算&#xff1a;查找节点…

iOS封装FrameWork

我们是整个项目封装给客户app用&#xff0c;项目里面有资源文件&#xff1a;xib和图片文件。有第三方&#xff0c;也有.a文件和第三方给我们的frameWork。下面记录下大体遇到的问题及遇到的冲突解决办法。 第一部分&#xff1a;封装frameWork 1.首先准备好&#xff0c;要封装的…

无线领夹麦克风哪款好,领夹麦克风哪个品牌好,多款麦克风推荐

​科技发展让无线领夹麦克风成为现代演讲、演出和采访不可或缺的工具。这种小巧便携的设备让我们摆脱线缆束缚&#xff0c;自由移动同时保持声音清晰稳定。无线领夹麦克风怎么选呢&#xff1f;接下来&#xff0c;我们介绍几款市面上综合表现相当不错的无线领夹麦克风给大家来参…