PAT 链表倒序的算法优化
之前的答案错误问题已经解决了,现在还有运行超时的问题,先贴上之前的代码
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 链表倒序的算法优化的更多相关文章
- LeetCode :2.两数相加 解题报告及算法优化思路
题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- Harris角点检测算法优化
Harris角点检测算法优化 一.综述 用 Harris 算法进行检测,有三点不足:(1 )该算法不具有尺度不变性:(2 )该算法提取的角点是像素级的:(3 )该算法检测时间不是很令人满意. 基于以上 ...
- RSA算法优化
RSA算法优化 大数乘法 模乗优化 剩余定理(孙子定理) RSA加解密 python的RSA计算优化 #-*- coding: utf-8 -*- ''' /********************* ...
- 内部元素一一相应的集合的算法优化,从list到hashmap
说是算法优化,基本上是在吹牛,仅仅只是算是记录下,我写代码时候的思路.毕竟还是小菜鸟. 我要开一个party,与会者都是情侣,可是情侣并非一起过来的,而是有先有后,可是每位与会者来的时候都拿着一束鲜花 ...
- Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法
不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...
- deeplearning算法优化原理
deeplearning算法优化原理目录· 量化原理介绍 · 剪裁原理介绍 · 蒸馏原理介绍 · 轻量级模型结构搜索原理介绍 1. Quantization Aware Training量化介绍1.1 ...
- [game]十字链表的AOI算法实现
AOI主要有九宫格.灯塔和十字链表的算法实现.本文阐述十字链表的实现和尝试. 1. 基本原理 根据二维地图,将其分成x轴和y轴两个链表.如果是三维地图,则还需要维护多一个z轴的链表.将对象的坐标值按照 ...
- O(1)效率的表面模糊算法优化。
很久没有写文章了,主要是最近一段时间没有以前那么多空暇空间,内存和CPU占用率一致都很高,应前几日群里网友的要求,今天发个表面模糊的小程序来找回之前写博客的热情吧. 国内我认为,破解表面模糊的原理的最 ...
随机推荐
- javaScript 基础知识汇总 (十)
1.New Function 语法:let func = new Function ([arg1[, arg2[, ...argN]],] functionBody) //无参数示例: let say ...
- Python第二周作业
绘制五角星 import turtle turtle.color('black','red') turtle.pensize(10) turtle.begin_fill() for i in rang ...
- C# 基础知识系列- 2 字符串
String的常见方法 String 变量的声明方式 C#中字符串常见的声明有两种: 直接使用字面值 即String s = "12321"; 使用构造器,即String s = ...
- 控制游戏/app使用期限/过期,证书有效期,弹出公告支持离线使用/后端控制,支持Swift、Objective-C集成非常简单,永久免费框架
CertCheck.framework (for iOS) 只能运行于真机上,切勿在模拟器上使用 这是一个控制游戏/app使用期限(到设定的时间无法打开app),或发布弹出公告永久免费的框架,可以全版 ...
- 循序渐进地聊一聊 box-shaow
影子在现实生活中可以是一个物体的副本,在 CSS 中也是这样的,相当于复制了那个元素(并不是真正的元素,对页面布局没有任何影响),可以从下面的代码中看出来. .container { width: 1 ...
- android 练习效果(界面一)
- Oracle job启动与关闭
--查看job下次执行时间以及间隔时间 select * from dba_jobs where job = '774'; --启动job exec dbms_job.run(774); --停用jo ...
- 你需要了解的 HTTP Status Code
你需要了解的 HTTP Status Code Intro 现在前后端分离的开发模式越来越流行,后端负责开发对应的 API,前端只需要 关注前端页面的数据展示和前端逻辑即可. 对于前后端分离这种开发模 ...
- 北邮oj 104. 912星球的研究生
104. 912星球的研究生 时间限制 1000 ms 内存限制 65536 KB 题目描述 最近912星球的研究生入学了,912星球的教务处因此忙的焦头烂额,要求yzr做一个信息管理系统登陆查询研究 ...
- Leetcode——二叉树常考算法整理
二叉树常考算法整理 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Leetcode算法项目点star呀~~ 二叉树常考算法 ...