描述小Y最近发现街上的汽车越来越多了作为汽车的重要标志一汽车牌照也是越来随不够用了已经从以前的十进制发展到三十六进制了比如以前的一个汽车牌照苏D88888现在的牌照苏DOYY11。小Y突发其想想知道他看到的大量汽车牌照中最近的两个汽车牌照相差多少输入描述若干行不超过500000行每行为一个汽车牌照。每个汽车牌照为一个7位的字符串 格式为SDxxxxx其中一个x表示一个0~9或A~Z所涉及的字母均为
思路:
首先,将每个牌照转换为对应的十进制数,可以使用一个函数将36进制转换为十进制。
然后,将所有转换后的牌照按照大小进行排序。
最后,遍历排序后的数组,找到相邻两个牌照之间的最小差值,即为所求。
代码如下:
def convert_to_decimal(license_plate):
decimal = 0
base = 1
for i in range(len(license_plate) - 1, -1, -1):
if license_plate[i].isdigit():
decimal += int(license_plate[i]) * base
else:
decimal += (ord(license_plate[i]) - ord('A') + 10) * base
base *= 36
return decimal
n = int(input())
license_plates = []
for _ in range(n):
license_plate = input()
license_plates.append(license_plate)
decimal_plates = [convert_to_decimal(license_plate) for license_plate in license_plates]
decimal_plates.sort()
min_diff = float('inf')
for i in range(1, n):
diff = decimal_plates[i] - decimal_plates[i-1]
min_diff = min(min_diff, diff)
print(min_diff)
复杂度分析:
转换每个牌照的时间复杂度为O(7)=O(1)。
排序的时间复杂度为O(nlogn)。
遍历排序后的数组的时间复杂度为O(n)。
所以,总的时间复杂度为O(nlogn)
原文地址: https://www.cveoy.top/t/topic/iImC 著作权归作者所有。请勿转载和采集!