Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m<=len),设计一个时间复杂度为O(N)、空间复杂度为O(1)的算法,改变原来的顺序表,把顺序表中原来在前的m个元素放到表的后段,后len-m个元素放到表的前段。 注意:交换操作会有多次,每次交换都是在上次交换完成后的顺序表中进行。

Input 第一行输入整数len(1<=len<=1000000),表示顺序表元素的总数;

第二行输入len个整数,作为表里依次存放的数据元素;

第三行输入整数t(1<=t<=30),表示之后要完成t次交换,每次均是在上次交换完成后的顺序表基础上实现新的交换;

之后t行,每行输入一个整数m(1<=m<=len),代表本次交换要以上次交换完成后的顺序表为基础,实现前m个元素与后len-m个元素的交换;

Output 输出一共t行,每行依次输出本次交换完成后顺序表里所有元素。

Sample Input 10 1 2 3 4 5 6 7 8 9 -1 3 2 3 5 Output 3 4 5 6 7 8 9 -1 1 2 6 7 8 9 -1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 -1

实现过程:首先注意题目要求时间复杂度为O(n),这说明在真正的实现过程语句中只能使用一个for循环,空间复杂度为O(1)说明不能建一个新的表来完成这个问题,假设12345五个数我们要将前两个数与后面三个数进行互换位置,我们可以写一个函数,这个函数内容就是依照m的值进行分段倒置,之后进行三次调用,分别是将所有数倒置变成54321,再调用一次函数让前面len-m个数倒置变成345,继续调用后面m个数倒置变成12,总数值就变成了34512完成要求。
tips:在做这个题的时候我先使用了c++输入输出cin和cout发现超时,故建议使用c中的scanf和printf可以直接判断类型从而节约时间。
总的来说就是分了三步走:1.全部倒置 2.对这个现在的表中前len-m个数倒置 3.最后让后m个数倒置

#include<bits/stdc++.h>using namespace std;
#define lenmax 1000010
typedef struct node
{int *elem;int length;int Listsize;
}List;void creat(List &L, int n)//创建顺序表
{L.elem = new int[lenmax];L.Listsize = lenmax;for(int i = 0; i < n; i++){scanf("%d", &L.elem[i]);}L.length = n;
}
void Remove(List &L, int start, int ends, int mid)
{for(int i = 0; i < mid; i++){int t = L.elem[start];L.elem[start++] = L.elem[ends];L.elem[ends--] = t;}
}void display(List &L)
{for(int i = 0; i < L.length - 1; i++){printf("%d ", L.elem[i]);}printf("%d\n", L.elem[L.length - 1]);
}int main()
{List L;int t, n, m;scanf("%d", &n);creat(L, n);scanf("%d", &t);while(t--){scanf("%d", &m);Remove(L, 0, n - 1, n / 2);//所有数倒置Remove(L, 0, n - m - 1, (n - m) / 2);//前len-m个数倒置Remove(L, n - m, n - 1, m / 2);//后面m个数倒置display(L);}return 0;
}

顺序表应用4-2:元素位置互换之逆置算法(数据改进)相关推荐

  1. 顺序表应用4:元素位置互换之逆置算法

    这道题和顺序表应用4-2:元素位置互换之逆置算法(数据改进)的算法没差什么. Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该 ...

  2. 顺序表应用3:元素位置互换之移位算法

    Description 一个长度为len(1<=len<=1000000)的顺序表,数据元素的类型为整型,将该表分成两半,前一半有m个元素,后一半有len-m个元素(1<=m< ...

  3. 顺序表的操作例题——已知一个顺序表L, 其中的元素递增有序排列,设计一个算法,插入一个元素x (x为int 后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。

    一.[题目描述]: 已知一个顺序表L, 其中的元素递增有序排列,设计一个算法,插入一个元素x (x为int 后保持该顺序表仍然递增有序排列(假设插入操作总能成功). 二.[题目分析]: 由题干可知,解 ...

  4. 顺序表之元素位置互换(改进版)

    顺序表应用4-2:元素位置互换之逆置算法(数据改进) Time Limit: 80 ms Memory Limit: 600 KiB Submit Statistic Problem Descript ...

  5. 元素位置互换之移位算法

    顺序表应用3:元素位置互换之移位算法 Time Limit: 1000 ms Memory Limit: 570 KiB Submit Statistic Problem Description 一个 ...

  6. 【顺序表】13 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    问题描述 : 目的:使用自行设计的顺序表ADT或STL中的vector模板,设计并实现顺序表应用场合的一些简单算法设计. 应用1:试设计一个算法,用尽可能少的辅助空间将非空顺序表中前 m 个元素和后 ...

  7. 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL中的ve ...

  8. 在顺序表中第五个位置插入一个元素9,实现顺序表插入的基本操作,输出顺序表中所有元素

    题目 在顺序表中第五个位置插入一个元素9,实现顺序表插入的基本操作,输出顺序表中所有元素 #include<iostream>using namespace std; #define OK ...

  9. 顺序表中删除最小值元素

    2019.6.19 数据结构2.2.3 综合应用题(1) 题目: 从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行 ...

最新文章

  1. AttributeError: ‘NoneType‘ object has no attribute ‘span‘
  2. R构建lasso回归模型并获得最佳正则化系数
  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
  4. 【架构】软件分层架构视角图
  5. 为什么有些xpath绝对路径拿不到数据_Python爬虫,登陆神器Selenium之xpath的使用
  6. 即将毕业的你,做好当一个社会人的准备了吗?
  7. mysql 使用储存过程_为什么使用mysql储存过程?mysql储存过程简介
  8. HTML作业-潮流服装网页
  9. 利用WPS的Excel制作项目进度表
  10. 冲击波病毒内幕点滴(2) (转)
  11. 电工入门基础知识问答,入门电工学习宝典系列
  12. win10虚拟机下载安装流程
  13. leaflet沿线标注_Leaflet for R包(三) 符号标记
  14. 英文写作——动词过去式和现在分词
  15. 微信/支付宝扫码支付流程
  16. 提取win10默认锁屏壁纸
  17. CocosDashboard课堂笔记
  18. 在linux下安装dns,详解在Linux下DNS的安装及配置
  19. 零售门店营业额预测分析(时间序列建模)
  20. 小汽车的位置(二维坐标运算)

热门文章

  1. 【Cocos2d-X开发笔记】第一期 Cocos2d-X的环境搭建
  2. android parcelable 详细介绍
  3. 【图数据库】Window下的安装Neo4j
  4. 简单的MapReduce项目,计算文件中单词出现的次数
  5. GitHub 上有哪些好用的爬虫?
  6. 开盘即破发,网易有道赴美上市,继续发力在线教育
  7. 逻辑回归评分卡分数映射
  8. 算法与数据结构(快速排序)
  9. MySQL-binlog格式对主从复制的影响MySQL主从复制的过程
  10. 白话Elasticsearch27-深度探秘搜索技术之误拼写时的fuzzy模糊搜索技术