No.2(3)——双指针算法实现平方数组排序

news2024/12/26 9:29:15

双指针算法指的是,从数组的两侧开辟指针变量进行查找,这类问题往往通过暴力(双循环)可以解出,而采用双指针相当于用空间换取时间,省略双层循环中重复的部分


对于一个含有负数的有序数组,要求保证在该数组每个元素平方后仍然保证有序。

如:-7 1 6 6 ,则平方后的排序应该是:1 36 36 49

一个简单的想法是,将所有元素平方后再进行排序,这是一种比较暴力的做法,复杂度取决于排序算法的复杂度

然而仔细思考一下不难发现,平方的本质就是二倍的绝对值,而绝对值是一种计算模长的方式:对对于向量来说,不考虑方向的情况下模长即为大小。对应本题,换句话说,由于原数组本身为有序数组平方后的最大值一定出现在原数组的两端——最小的负数和最大的正数之间

因此我们可以采用双指针算法,从数组两侧开始寻找左右指针指向元素大的先压入新的数组,然后向中间移动指针,再进行下一轮比较;直到两指针相遇时结束~ 

具体的C++代码如下:

#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;
	
	int it1=0,it2=num-1;
	//分别指向头部和尾部
	vector<int> N;
	for(int i=1;i<=num;i++)
		N.push_back(0);
	//开辟新的数组用于存放平方后的数组 
	while(it1<=it2)
	{   //指针未相遇时持续循环 
		if(V[it1]*V[it1]>=V[it2]*V[it2])
		{
			//大者先入数组 
			int temp1=V[it1]*V[it1]; 
			N[num-1]=temp1;
			//直接将大的存在最后面,省去排序的过程 
			it1++;
			//指针向中间移动 
			num--;
			//下标要向前移动 
		}
		else if(V[it2]*V[it2]>V[it1]*V[it1])
		{
			int temp2=V[it2]*V[it2];
			N[num-1]=temp2;
			it2--;
			num--;
			//同理 
		}
	} 
	cout<<"升序后的平方和数组为:"<<endl;
	for(vector<int>::iterator it=N.begin();it!=N.end();it++)
		cout<<(*it)<<" ";
	cout<<endl;
	return 0;
}

运行结果如下:

再加一组测试用例:-7 -3 1 1 5 9

 答案符合预期~

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

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

相关文章

Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

目录 volume 卷 官方文档&#xff1a;卷 | Kubernetes 一、emptyDir&#xff08;临时卷&#xff09; 二、hostPath卷 type字段参数 hostPath 实验&#xff1a; 三、第3方提供的存储卷&#xff08;百度云、阿里云、亚马逊云、谷歌云等&#xff09; 四、local卷 五、NF…

Geany配置python虚拟环境(Anaconda)

Geany配置python运行环境步骤&#xff1a; 以我的conda为例 我的conda中python虚拟环境base环境python位于路径 D:\Anaconda3 打开Geany -> 生成 -> 设置生成命令 在弹出的窗口内输入以下命令 # Compile选项后修改 "D:\Anaconda3\python.exe" -m py_compi…

准备WebUI自动化测试面试?这30个问题你必须掌握(一)

本文共有8600字&#xff0c;包含了前十五个问题&#xff0c;如需要后十五个问题&#xff0c;可查看文末链接~ 1. 什么是WebUI自动化测试&#xff1f; WebUI自动化测试是指使用自动化测试工具和技术来模拟用户在Web用户界面&#xff08;UI&#xff09;上执行操作&#xff0c;并…

条件概率我知道,但什么是条件期望?--草稿

目录 1 目标问题&#xff1a; 什么是条件期望 2 条件期望&#xff0c;全期望公式 1 目标问题&#xff1a; 什么是条件期望 这次先不说目标 先引用一个小学数学题 1班平均分是93,2班平均分是95,两个班的平均分怎么算 错误算法&#xff0c;(9395)/294 除非两个班的学生数量一…

园区电能监测系统

园区电能监测系统是一种能够对园区内电能使用情况进行实时监测和管理的系统&#xff0c;可以帮助企业更好地控制能源消耗&#xff0c;提高能源利用效率&#xff0c;从而降低能源成本&#xff0c;对于推进节能减排和可持续发展具有重要意义。 园区电能监测系统通常由多个子系统组…

RocketMQ 5.0 快速入门

RocketMQ 5.0 Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨&#xff0c;RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案&#xff0c;被广泛应用于互联…

大二web作业精仿王者荣耀(html+css)

经过漫长的期末考试季节&#xff0c;我成功地完成了一个王者荣耀的仿写项目&#xff0c;并且非常高兴地与大家分享。 作品展示 作业-王者荣耀 作品目录 获取源码 1&#xff0c;复制该网站 https://download.csdn.net/download/qq_42431718/87946610 2&#xff0c;点击上方下…

Lazygit贴合 neovim

功能性要比gitui 好用&#xff0c;vim 的键位习惯 > 嵌入式数据库 &#xff0c;python 的性能够用了 … … ,分析差异&#xff0c;选择 备份和升级

ROS:action通信

目录 一、前言二、概念三、作用四、实际案例4.1需求4.2action通信自定义action文件4.2.1定义action文件4.2.2编辑配置文件4.2.3编译 4.3action通信自定义action文件调用(C)4.3.1流程4.3.2vscode配置4.3.3服务端4.3.4客户端4.3.5编译配置文件4.3.6执行 4.4action通信自定义actio…

python_day11_practice

将文本数据插入数据库 两文本文件为day10面向对象练习案例 将data_define.py文件复制过来&#xff08;导入失败&#xff0c;疑惑&#xff09; 新建数据库&#xff0c;建表orders -- CREATE DATABASE py_sql charset utf8;use py_sql;create table orders(order_date date,…

企业内部FAQ系统的搭建重要性是什么?

企业内部FAQ系统&#xff08;Frequently Asked Questions&#xff0c;常见问题解答系统&#xff09;的搭建对于企业来说具有重要的意义。它可以帮助企业有效地管理和解决员工和客户的常见问题&#xff0c;提高工作效率和服务质量。 企业内部FAQ系统搭建的重要性&#xff1a; …

k8s集群内网与办公网络打通

k8s网络 k8s节点ip段&#xff1a;192.168.1.0/24 k8s pod ip段&#xff1a; 10.233.64.0/18 k8s svc ip段&#xff1a; 10.233.0.0/18办公网络 办公电脑ip段&#xff1a;192.168.2.0/24 交换机ip&#xff1a; 192.168.8.252说明 192.168.2.0/24网段访问192.168.1.0/24网段经…

埋点数据完备性校验及结果分析

一、数据校验功能入口 入口:数据管理——数据质量——数据校验 二、操作步骤 2.1 统计时间区间 根据自身需要进行选择。一般选择埋点严重bug fix后的时间,避免脏数据过多影响分析结果。 2.2 数据抽样 根据自身需要进行选择。全量数据量较大,分析起来会复杂一些,但是结…

Win11中的Swapfile.sys

除了 pagefile.sys 和 hiberfil.sys 文件外&#xff0c;在系统根目录会多出一个 swapfile.sys 虚拟内存文件。Windows 10/8 系统为什么会同时使用 SWAP 交换文件和 Page 页面文件呢&#xff1f; 其实 swapfile.sys 文件目前只被用来交换 Universal App (其实就是Metro App)的个…

pyqt 使用pixmap展示图片时候出现失真(图片偏移)

像上图上面的情况&#xff0c; 都是经过放大、旋转等操作&#xff0c;展示图片的时候出现失真的情况 一般都是显卡的问题 需要在qimage转pixmap时&#xff0c;添加部分参数 修改办法&#xff1a; 原本是&#xff1a; pixMap QImage(self.pic_image, width, height, QImage…

JDK、JRE、JVM三者之间的关系以及区别

一、关系 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap等] JRE JVM Java 的核心类库 二、JDK,JRE与JVM介绍 1、JDK JDK是用于Java程序开发的最小环境&#xff0c;包含&#xff1a;Java程序设计语言&#xff0c;Java虚拟机&#xff08;JVM&#xff09;&#xff0…

喜讯!旭帆科技成功入驻“科大硅谷”!

2023年7月&#xff0c;安徽旭帆信息科技有限公司&#xff08;以下简称“旭帆科技”&#xff09;成功入驻“科大硅谷”&#xff0c;成为合肥城市发展新引擎、科创生态集群企业队伍中的一员。 “科大硅谷”项目建设总投资约75.82亿&#xff0c;共计17.37平方公里&#xff0c;是聚…

MQTT 订阅选项的使用

在 MQTT 发布/订阅模式介绍这篇博客中&#xff0c;我们已经了解到&#xff0c;我们需要先向服务端发起订阅&#xff0c;才能从服务端接收对应的消息。如果说订阅时指定的主题过滤器决定了服务端将向我们转发哪些主题下的消息&#xff0c;那么订阅选项则是允许我们进一步定制服务…

Python学习(十三)

安装包的方法&#xff1a; #python数据和json数据的相互转换 import json #准备列表&#xff0c;列表的每一个元素都是字典&#xff0c;将其转换为JSON data [{"name":"大大","age":21},{"name":"小小","age":21…

Java工程师进阶:50小时,搞定企业级核心框架

哈喽&#xff0c;做Java开发的同学们注意啦&#xff01;&#xff01;&#xff01; 小谷又来分享技术了&#xff0c;关乎Java工程师技能进阶与升职加薪的方向哦~~ 最近老有小伙伴私信小谷&#xff0c;说自己的Java水平已经到了瓶颈期&#xff0c;不知道该咋突破&#xff0c;长久…