No.2(4)——双指针解决柱子间最大面积

news2024/10/4 4:29:43

已知现在有几根柱子成有序排列,求出两根柱子之间围成面积的最大值。

         不难想到,只需要将每两个柱子之间的面积计算一次并找出最大值,即可找到答案,但采用双指针法可以有效降低重复计算:从数组的两侧开始移动左右两个指针,首先计算当前面积,由于面积由两根柱子之间的短者决定,因此不难想出:下次移动较长的柱子所对应的指针是没有意义的,故我们应该移动较短侧的指针,如果移动后值变大则更新最大值,否则继续向前移动,直至两指针相遇——通过此种方法的复杂度为o(n)。

实现的代码如下:

#include <iostream>
#include <vector>
using namespace std;
 
int main(int argc, char** argv) {
	int num=0;
	vector<int> V;
	cout<<"请输入柱子的个数:"<<endl;
	cin>>num;
	for(int i=1;i<=num;i++)
	{
		int temp=0;
		cin>>temp;
		V.push_back(temp);
	}
	cout<<"用户读入的数据为:"; 
	for(vector<int>::iterator it=V.begin();it!=V.end();it++)
		cout<<(*it)<<" ";
	cout<<endl;
	cout<<endl;
	 
	int it1=0;
	int it2=num-1;
	//分别定义指向头尾的指针
	int max=0;
	while(it1!=it2)
	{
		cout<<"当前指针下标为:"<<it1<<" and "<<it2<<endl;
		if(V[it1]>V[it2])
		{
			cout<<"左指针更大一些"<<endl;
			int maxt=(it2-it1)*V[it2];
			if(maxt>max)
				max=maxt;
			cout<<"本次操作的面积为:"<<maxt<<endl;
			cout<<"当前操作的最大值为:"<<max<<endl;
			it2--; 
		}
		else if(V[it2]>V[it1])
		{
			cout<<"右指针更大一些"<<endl;
			int maxt=(it2-it1)*V[it1];
			if(maxt>max)
				max=maxt;
			cout<<"本次操作的面积为:"<<maxt<<endl;
			cout<<"累计操作的最大值为:"<<max<<endl;
			it1++; 
		}
		cout<<endl;
	} 
	cout<<"求得的最大面积为:"<<max<<endl; 
	return 0;
}

 通过手算不难发现上述用例结果为6。

第二个用例,手算结果为12。

最后再来一个更长的用例,手算结果为42。

 

 此处发现了一个bug:就是源代码未考虑两个指针相等的情况。此处规定:当两指针相等时,对比两指针靠内侧的的下一位大小,如果左边大就移动左边,反之则右边,如果还相同则可以任选。

具体代码如下:

else if(V[it1]==V[it2])
		{
			cout<<"两个指针一样大"<<endl;
			int maxt=(it2-it1)*V[it1];
			if(maxt>max)
				max=maxt;
			cout<<"本次操作的面积为:"<<maxt<<endl;
			cout<<"累计操作的最大值为:"<<max<<endl;
			if(V[it1+1]>V[it2-1])
				it1++;
			else if(V[it1+1]<=V[it2-1])
				it2--;
			//判断两侧的下一位谁大,谁大移动谁
			//对于下一位还相同的情况,则可以任选一侧,此处选的是右侧 
		}

 结果与预期一致。

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

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

相关文章

Elasticsearch SQL 详解

Elasticsearch SQL 是一个 X-Pack 组件&#xff0c;允许用户使用类似 SQL 的语法在 ES 中进行查询。用户可以在 REST、JDBC、命令行中使用 SQL 在 ES 执行数据检索和数据聚合操作。ES SQL 有以下几个特点&#xff1a; 本地集成&#xff0c;SQL 模块是 ES 自己构建的&#xff0…

数据库| 中国研究数据服务平台

数据哪里查&#xff0c;查不到&#xff0c;怎么办&#xff1f; 今天分享一个数据库|中国研究数据服务平台&#xff08;CNRDS&#xff09; 中国研究数据服务平台&#xff08;Chinese Research Data Services&#xff0c;简称CNRDS&#xff09;&#xff0c;是上海经禾信息技术有…

HCIA|详解Telnet协议

一、前言 今天翻到了之前写的Telnet协议的实验&#xff0c;由于该篇文章创作于开始写作的初期&#xff0c;文章结构简单、布局潦草&#xff0c;但实验内容是完整的&#xff0c;因此本篇文章将对Telnet技术进行详解&#xff0c;希望能够对大家提供帮助。在本文中&#xff0c;将从…

ECharts is not Loaded -- echarts里china.json与china.js有何区别

echarts官方提示他们的地图json测绘不符合中国官方标准不提供下载 如下图 china.json china.js 可以很明显的看出地图山东与辽宁部分堆到一起的情况, 接下来换成china.js vue项目&#xff0c;要引入china.js&#xff0c;直接import引入会报错&#xff1a;ECharts is not Loa…

【SCI征稿】IEEE旗下中科院1区(TOP),有关计算机的广泛领域研究

期刊简介&#xff1a; 出版社&#xff1a;IEEE 影响因子&#xff1a;IF&#xff08;2022&#xff09;10.5-11.0 期刊分区&#xff1a;JCR1区&#xff0c;中科院1区&#xff08;TOP&#xff09; 检索情况&#xff1a;SCIE&EI 双检 自引率&#xff1a;13.20% 国人占比&…

在Illustrator中创建 3D 冰淇淋模型对象

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 一旦你学会了如何在Illustrator中制作一个对象3D&#xff0c;你可以前往Envato Elements&#xff0c;在那里你可以找到大量的3D设计来激发你的灵感。这个基于订阅的市场拥有超过 2&#xff0c;000 个 Illus…

国外广告联盟和国内广告联盟的优劣势是什么

国外广告联盟和国内广告联盟在一些方面存在一些差异和优劣势。以下是对比它们的一些常见优劣势&#xff1a; 一、国外广告联盟优势&#xff1a; 1、国际资源&#xff1a;国外广告联盟拥有更广泛的国际媒体资源&#xff0c;能够帮助广告主拓展全球市场&#xff0c;进一步提高国…

Arduino安装ESP32下载失败的解决方法

Arduino安装ESP32时&#xff0c;经常下载失败 解决办法&#xff1a; 1.复制命令行中的提示信息到记事本&#xff0c;找到下载地址 2.打开浏览器&#xff0c;在地址栏中贴粘下载地址&#xff0c;回车开始下载 3.将下载的包复制到C:\Users\Administrator\AppData\Local\Arduino…

Spring Boot进阶(54):Windows 平台安装 MongoDB数据库 | 超级详细,建议收藏

1. 前言&#x1f525; Windows如何安装MongoDB数据库及使用呢&#xff1f;这将又会是干货满满的一期&#xff0c;全程无尿点不废话只抓重点教&#xff0c;具有非常好的学习效果&#xff0c;拿好小板凳准备就坐&#xff01;希望学习的过程中大家认真听好好学&#xff0c;学习的途…

vue3 电子书 pdf转图片 pdf实现翻页效果 pdfjs-dist、turn.js电子书翻页效果

实现效果&#xff1a; 一、下载插件 // 重点 pdfjs-dist 下载版本有时候 2.16.105 有效 有时候 3.4.120 有效&#xff0c;小编也没搞懂为什么npm install pdfjs-dist3.4.120 //一定要下载 3.4.120 版本的&#xff0c;不然会有报错npm install jquery // 使用的是 turn.js…

【技巧】Maven重复依赖分析查找

【技巧】Maven重复依赖分析查找 遇到奇葩的错误可以考虑是不是依赖冲突了 比如同一段代码 再这个项目中好好的 另一个项目中不能用等 idea安装插件 maven helper 打开pom文件 输入要查找的依赖 将不用的排除掉 右键排除即可

helm 部署 cert-manager 实践

文章目录 1. 介绍2. 架构3. 安装4. 测试5. 删除 1. 介绍 Cert-manager 是一个 Kubernetes 上的证书管理控制器&#xff0c;它可以自动化证书签发和更新的过程。它使用了 Kubernetes 中的 Custom Resource Definitions (CRDs) 来定义证书的请求和颁发&#xff0c;以及与之相关的…

【深度学习】:《PyTorch入门到项目实战》(十六):卷积神经网络:NiN(Network in Network)和1×1卷积(附Pytorch源码)

专栏介绍 ✨本文收录于【深度学习】&#xff1a;《PyTorch入门到项目实战》专栏&#xff0c;此专栏主要记录如何使用PyTorch实现深度学习算法及其项目实战&#xff0c;目前pytorch基础计算已经更新完&#xff0c;正在更新CNN&#xff0c;接下来会陆续更新RNN、CV、NLP、搜推广项…

ceph三个接口的创建

目录 创建 CephFS 文件系统 MDS 接口 服务端操作 客户端操作 创建 Ceph 块存储系统 RBD 接口 1、创建一个名为 rbd-demo 的专门用于 RBD 的存储池 2、将存储池转换为 RBD 模式 ​编辑 3、初始化存储池 4、创建镜像 5、镜像管理 6、Linux客户端使用 客户端使用 RBD …

从MVC跨越到DDD微服务架构是如何演进的

微服务架构演进 领域模型中对象的层次从内到外依次是&#xff1a;值对象、实体、聚合和限界上下文。 实体或值对象的简单变更&#xff0c;一般不会让领域模型和微服务发生大变。但聚合的重组或拆分却可以。因为聚合内业务功能内聚&#xff0c;能独立完成特定业务。那聚合的重组…

嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?

12 | 什么是状态转换测试&#xff1f;如何开展&#xff1f; 1 状态转换测试简介1.1 基于状态的测试设计技术1.2 系统行为 2 故障类别2.1 状态2.2 防护2.3 转换2.4 事件2.5 其它 3 状态转换测试技术3.1 编写状态-事件表3.2 编写转换树3.3 编写合法测试用例的测试脚本 3.4 编写非…

【100天精通python】Day5:python 基本语句,流程控制语句

目录 1. 条件语句 1.1 if语句 1.2 if-else语句 1.3 if-elif-else语句 2 循环语句 2.1 for循环 2.2 while循环&#xff1a; 3 跳转语句 3.1 break语句 3.2 continue语句 3.3 pass语句 4 异常处理语句&#xff08;try-except语句&#xff09; 5 语句嵌套 5.1 条…

将maven库中没有的jar包导入本地库后编译还提示缺这个jar包

Maven本地仓库有对应的jar包但是报找不到 问题原因 第一&#xff0c;你本地仓库对应的包文件夹下有_remote.repositories这个文件&#xff1b; 第二&#xff0c;你的项目现在连接不到下载这个包的仓库&#xff1b; 以上两点就是本地明明有对应的jar包&#xff0c;但项目中还…

SpringBoot项目中WEB页面放哪里--【SB系列之008】

SpringBoot系列文章目录 SpringBoot 的项目编译即报错处理–SB系列之001 —第一部的其它章节可以通过001链接 SpringBoot项目中WEB页面放哪里–【SB系列之008】 SpringBoot项目中WEB与Controller的联系–【SB系列之009】 ———————————————— 文章目录 SpringBoo…

VulnHub靶机-Socnet

文章目录 实验环境信息收集存活主机探测端口服务探测目录扫描反弹shell建立代理 内网探测漏洞发现漏洞利用 权限提升总结 实验环境 靶机地址&#xff1a; https://www.vulnhub.com/entry/boredhackerblog-social-network,454/靶机ip&#xff1a;192.168.56.101 攻击机&#x…