python31001无标题_【python3】OJ 1001 487-3279 Time Limit Exceeded

最近学习python,在山东理工大学的oj上刷题(487-3279),但是才做到第二个题就老是TLE(Time Limit Exceeded),自己本机执行示例明明可以的,但是一提交就超时,后来发现题目中有个(up to 100,000),意思就是最大有10万条数据,那就在本地模拟一下,我去,瞬间让我感觉不对,本来应该很快执行结束的却花了我3分多钟,怪不得超时呢,后来研究了下,改进了下代码(仍有进步空间,我看到ac的最快用时600ms),使用了字典,执行时间在1秒左右了,提交终于通过了,那个激动啊🤩。

代码如下,供和我一样遇到问题的同学参考,希望少走点弯路

# -*- coding: UTF-8 -*-

# 输入的电话号码个数

num = int(input());

# 最多十万个

if num >= 100000:

num = 100000;

# 电话号码

input_array = [];

# 已输入的个数

flag = 0;

# 处理之后的电话

phone_array = [];

# 重复的电话和数量字典

phone_repeat_dict = {};

while (flag < num):

# 存储所有输入的电话

input_array.append(input());

flag += 1;

for tmp in input_array:

# 替换中横线

if '-' in tmp:

tmp = tmp.replace('-', '');

phone = "";

times = 0;

# 注意下面的数字必须加引号,因为这是字符

for t in tmp:

if t == "A" or t == "B" or t == "C":

phone += "2";

elif t == "D" or t == "E" or t == "F":

phone += "3";

elif t == "G" or t == "H" or t == "I":

phone += "4";

elif t == "J" or t == "K" or t == "L":

phone += "5";

elif t == "M" or t == "N" or t == "O":

phone += "6";

elif t == "P" or t == "R" or t == "S":

phone += "7";

elif t == "T" or t == "U" or t == "V":

phone += "8";

elif t == "W" or t == "X" or t == "Y":

phone += "9";

else:

phone += t;

# 插入横线

if times == 2:

phone += "-";

times += 1;

phone_array.append(phone);

# 没有方插入

if phone not in phone_repeat_dict.keys():

phone_repeat_dict[phone] = 1;

else:

phone_repeat_dict[phone] += 1;

# 没有重复的则输出 No duplicates.

times = 0;

# 转为list

phone_last_array = list(phone_repeat_dict.keys());

# 对结果要正序排序

phone_last_array.sort(reverse = False);

for i in phone_last_array:

phone_count = phone_repeat_dict[i];

if phone_count >= 2:

print(i + " " + str(phone_count));

times += 1;

# 次数等于0表示没有重复的

if times == 0:

print("No duplicates.");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值