之前的答案错误问题已经解决了,现在还有运行超时的问题,先贴上之前的代码

 1 #include <iostream>
2 #include <string.h>
3 using namespace std;
4
5 int main()
6 {
7 int count, renum;
8 string add;
9 cin>>add>>count>>renum;
10 string add1[count],add2[count],madd1[count],madd2[count];
11 int mnum[count],num[count];
12 for(int i=0;i<count;i++)
13 {
14 cin>>add1[i]>>num[i]>>add2[i];
15 }
16 for(int i=0;i<count;i++)
17 {
18
19 for(int j=0;j<count;j++)
20 {
21 if(add1[j]==add)
22 {
23 madd1[i] = add1[j];
24 mnum[i]=num[j];
25 madd2[i] = add2[j];
26 add=madd2[i];
27 break;
28 }
29 }
30 }
31 int temp=0;
32 int fake = count;
33 while(count-renum>=0)
34 {
35 for(int i= temp,j=temp+renum-1;i<=temp+renum-1;i++,j--)
36 {
37 add1[i] = madd1[j];
38 num[i] = mnum[j];
39 }
40 count-=renum;
41 temp=temp+renum;
42 }
43 for(int i=temp;i<fake;i++)
44 {
45
46 add1[i] = madd1[i];
47 num[i] = mnum[i];
48 }
49 for(int i=0;i<fake-1;i++)
50 {
51 add2[i]=add1[i+1];
52 }
53 add2[fake-1] = "-1";
54 for(int i=0;i<fake;i++)
55 {
56 cout<<add1[i]<<" "<<num[i]<<" "<<add2[i]<<endl;
57 }
58 return 0;
59 }

  这个程序的复杂度为o(n*n),现在想办法降低复杂度,分析可以发现大部分时间是花在将输入数据按顺序排序上,然后我想到如果输入数据的每一行的第一个,和第三个数据真的表示为地址的话,就省去了排序的时间,所以,我们可以开一个10w数组,数组下标表示地址,以此来减少排序时间。具体实现代码如下

 #include <iostream>
#include <string.h>
#include <iomanip>
using namespace std; int main()
{
int count ,add,renum;
cin>>add>>count>>renum;
int add1[],num[],add2[];
for(int i=;i<=;i++)
{
add1[i]=;
add2[i]=;
num[i]=;
}
for(int i=;i<count;i++)
{
int a,b,c;
cin>>a>>b>>c;
add1[a]=a;
num[a]=b;
add2[a]=c; }
add2[]=add;
int before=;
int late=-;
int re[renum];
int total=;
int sha=;
while(add2[sha]!=-)
{
sha=add2[sha];
total++;
}
int xunh = total/renum;
for(int j=;j<xunh;j++)
{
int x = add2[before];
for(int i=;i<renum;i++)
{
re[renum--i] = x;
x=add2[x];
if(i==renum-)
{
late = x;
}
}
add2[before] = re[];
for(int i=;i<renum-;i++)
{
add2[re[i]] = re[i+];
}
add2[re[renum-]] = late;
before = re[renum-];
}
int m =;
while(m!=-)
{
m=add2[m];
if(m!=- &&add2[m]!=-)
cout<<setw()<<setfill('')<<add1[m]<<" "<<num[m]<<" "<<setw()<<setfill('')<<add2[m]<<endl;
else if(m!=-)
cout<<setw()<<setfill('')<<add1[m]<<" "<<num[m]<<" "<<add2[m]<<endl;
}
return ;
}

上传检验成功。

以上。

PAT 链表倒序的算法优化的更多相关文章

  1. LeetCode :2.两数相加 解题报告及算法优化思路

    题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...

  2. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  3. Harris角点检测算法优化

    Harris角点检测算法优化 一.综述 用 Harris 算法进行检测,有三点不足:(1 )该算法不具有尺度不变性:(2 )该算法提取的角点是像素级的:(3 )该算法检测时间不是很令人满意. 基于以上 ...

  4. RSA算法优化

    RSA算法优化 大数乘法 模乗优化 剩余定理(孙子定理) RSA加解密 python的RSA计算优化 #-*- coding: utf-8 -*- ''' /********************* ...

  5. 内部元素一一相应的集合的算法优化,从list到hashmap

    说是算法优化,基本上是在吹牛,仅仅只是算是记录下,我写代码时候的思路.毕竟还是小菜鸟. 我要开一个party,与会者都是情侣,可是情侣并非一起过来的,而是有先有后,可是每位与会者来的时候都拿着一束鲜花 ...

  6. Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...

  7. deeplearning算法优化原理

    deeplearning算法优化原理目录· 量化原理介绍 · 剪裁原理介绍 · 蒸馏原理介绍 · 轻量级模型结构搜索原理介绍 1. Quantization Aware Training量化介绍1.1 ...

  8. [game]十字链表的AOI算法实现

    AOI主要有九宫格.灯塔和十字链表的算法实现.本文阐述十字链表的实现和尝试. 1. 基本原理 根据二维地图,将其分成x轴和y轴两个链表.如果是三维地图,则还需要维护多一个z轴的链表.将对象的坐标值按照 ...

  9. O(1)效率的表面模糊算法优化。

    很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前写博客的热情吧. 国内我认为,破解表面模糊的原理的最 ...

随机推荐

  1. 记一次修改mysql密码

    因为马大哈的原因,没有记录自己服务器mysql的密码,试来试去试不出来只好选择重置密码. 直接上命令: 首先 vim /etc/my.cnf 在my.cnf文件中,在[mysqld]的段中加上 ski ...

  2. WPF 启动缓慢问题

    Actually there's 2 main reasons that the default project type for WPF applications is x86. Intellitr ...

  3. Natas11 Writeup(常见编码、异或逆推、修改cookie)

    Natas11: 页面提示cookie被异或加密保护,查看源码,发现了一个预定义参数和三个函数. //预定义参数,猜测将showpassword设置为yes即可得到密码. $defaultdata = ...

  4. Spring框架——IOC 自动装载

    IOC自动装载有两种形式 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  5. JDBC(三)----JDBC控制事务

    ##  JDBC控制事务 1.事务:一个包含多个步骤的业务操作.如果这个业务员操作被事务管理,则这多个步骤要么同时成功,要么同时失败. 2.操作: 1.开启事务 2.提交事务 3.回滚事务 3.使用C ...

  6. 题解 CF1304E 【1-Trees and Queries】

    前言 这场比赛,在最后 \(5\) 分钟,我想到了这道题的 \(Idea\),但是,没有打完,比赛就结束了. 正文 题目意思 这道题目的意思就是说,一棵树上每次给 \(x\) 和 \(y\) 节点连 ...

  7. java 为什么重写equals一定要重写hashcode?

    前言 最近复习,又看到了这个问题,在此记录和整理,通过例子来说明这种情况的原因,使大家可以清晰明白这个问题. 初步探索 首先我们要了解equals方法是什么,hashcode方法是什么. equals ...

  8. 网维大师无盘刷新B盘方法

  9. [枚举] HDU 2019 Multi-University Training Contest 8 - Calabash and Landlord

    Calabash and Landlord Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  10. 家乐的深度学习笔记「4」 - softmax回归

    目录 softmax回归 分类问题 softmax回归模型 softmax运算 矢量表达式 单样本分类的矢量计算表达式 小批量样本分类的矢量计算表达式 交叉熵损失函数 模型预测及评价 图像分类数据集( ...