顺序表应用4-2:元素位置互换之逆置算法(数据改进)(SDUT 3663)
Problem 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
Sample 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),所以可以先把整个表都逆置,然后把前m个和后len-m个分别再逆置一次。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int maxn = 1000000;
struct node
{
    int *elem;
    int len;
};
void Creatlist(int len, struct node &list)
{
    list.elem = (int *)malloc(maxn*sizeof(int));
    list.len = len;
    for(int i = 0; i < len; i ++)
    {
        scanf("%d",&list.elem[i]);
    }
}
void Move(int front,int end,struct node &list)
{
    for(int i = front,j = 0; i < (front + end + 1) / 2; i ++, j ++)
    {
        int x = list.elem[i];
        list.elem[i] = list.elem[end - j - 1];
        list.elem[end - j - 1] = x;
    }
}
void print(struct node &list)
{
    for(int i = 0; i < list.len - 1; i ++)
        printf("%d ",list.elem[i]);
    printf("%d\n",list.elem[list.len-1]);
}
int main()
{
    int len,t,m;
    struct node list;
    scanf("%d",&len);
    Creatlist(len,list);
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&m);
        Move(0,len,list);
        Move(0,len - m, list);
        Move(len - m,len,list);
        print(list);
    }
    return 0;
}
(图片来源百度)
顺序表应用4-2:元素位置互换之逆置算法(数据改进)(SDUT 3663)的更多相关文章
- SDUT OJ 顺序表应用4:元素位置互换之逆置算法
		顺序表应用4:元素位置互换之逆置算法 Time Limit: 10 ms Memory Limit: 570 KiB Submit Statistic Discuss Problem Descript ... 
- SDUT OJ 顺序表应用3:元素位置互换之移位算法
		顺序表应用3:元素位置互换之移位算法 Time Limit: 1000 ms Memory Limit: 570 KiB Submit Statistic Discuss Problem Descri ... 
- 顺序表应用3:元素位置互换之移位算法(SDUT 3326)
		题解:用一个for,循环m次,每次都把最前面的放到最后面,就可以了. #include <stdio.h> #include <stdlib.h> #include <s ... 
- 顺序表添加与删除元素以及 php实现顺序表实例
		对顺序表的操作,添加与删除元素. 增加元素 如下图所示 对顺序列表 Li [1328,693,2529,254] 添加一个元素 111 ,有三种方式: a)尾部端插入元素,时间复杂度O(1); ... 
- js 数组元素位置互换
		如下实现的是,先将数组反转,然后将第二个元素与倒数第三个元素位置互换 ,,,,,,,); arr.reverse(); two=arr.splice(,,); three=arr.splice(-,, ... 
- 数据结构顺序表删除所有特定元素x
		顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ... 
- 前面顺序表的补充(复杂度,未实现的算法,空间扩展)(基于c语言)
		0.对于顺序表中的n个元素,如果在下标i的位置之前插入一个元素,则需要将后面n-i个元素向后移动一位:如果是删除下标为i处的元素,则是则需要将后面n-i-1个元素向前移动一位.如果说在i的位置插入和删 ... 
- css相对定位+浮动实现元素位置互换
		1.设置元素透明度 opacity:0.5; // w3c filter:alpha(opacity=50); //IE 2 position:relative; float:left; 一起使用的效 ... 
- c数据结构 顺序表和链表 相关操作
		编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ... 
随机推荐
- 牛客 158D a-贝利福斯数
			将所有形如ax+1的数称为a-贝利福斯数,其中x是正整数.一个a-贝利福斯数是a-贝利福斯素数,当且仅当它不能被分解成两个a-贝利福斯数的积.现在给出a,n,问有多少个 ≤ n的a-贝利福斯数可以被分 ... 
- Mysterious Crime CodeForces - 1043D (哈希)
			大意: 给定m个n排列, 求有多少个公共子串. 枚举每个位置, hash求出最大匹配长度. #include <iostream> #include <sstream> #in ... 
- 区间问题 codeforces 422c+hiho区间求差问
			先给出一个经典的区间处理方法 对每个区间 我们对其起点用绿色标识 终点用蓝色标识 然后把所有的点离散在一个坐标轴上 如下图 这样做有什么意义呢.由于我们的区间可以离散的放在一条轴上面那么我们在枚举区 ... 
- linux查询cpu过高原因--java
			1. 查询java pid top -c 2. 查询java进程下,线程情况 top -Hp pid(threadIdList) 3. 将10进制线程id转为16进制 printf "%x ... 
- Linux Permission denied 问题
			Linux Permission denied 问题 来源 https://www.cnblogs.com/sparkdev/p/10287164.html 如果当前用户没有某个文件的写权限,又要通 ... 
- 基于SQL Server日志链查看数据库insert/update/delete操作(一)
			在MSSQLServer2008下的语句 不同版本可能语句会有微小差别 SELECT [Slot ID], [Transaction ID], Operation, AllocUnitName, [C ... 
- Django-DRF-视图的演变(二)
			Django-DRF-视图的演变 版本一(基于类视图APIView类) views.py: APIView是继承的Django View视图的. 1 from .serializers impor ... 
- otter+canal
			https://blog.csdn.net/u011142688/article/details/52046928 https://blog.csdn.net/chenzeyuczy/article/ ... 
- axios跨域问题(包括开发环境和生产环境)
			之前写过一篇axios跨域问题,写的过于片面,没有考虑过实际开发中遇到的问题,以及如何全局使用axios,这次再写一篇,以后再有新发现再更新... 1.在static文件夹下新建/js/config. ... 
- Redis-String常用命令
			Redis-String常用命令 set key value- 设置Key-value键值对 get key 获取指定key对应的值 append key value 在指定key对应值的后面追加va ... 
