版本号比较
问题描述
在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。你需要根据两个版本号 version1 和 version2,判断哪个版本更新,或者它们是否相同。
例如,2.5.33 和 0.1 都是有效的版本号。
当比较两个版本时,从左到右依次比较它们的修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个版本没有足够的修订号,缺失部分默认补为0。
你需要根据以下规则返回比较结果:
- 如果
version1 > version2,返回1。 - 如果
version1 < version2,返回-1。 - 如果两个版本相等,返回
0。
测试样例
样例1:
输入:
version1 = "0.1" , version2 = "1.1"输出:-1
样例2:
输入:
version1 = "1.0.1" , version2 = "1"输出:1
样例3:
输入:
version1 = "7.5.2.4" , version2 = "7.5.3"输出:-1
样例4:
输入:
version1 = "1.0" , version2 = "1.0.0"输出:0
题解
这道题目是字符串比较,末尾补零不会影响大小,当长度相同后,通过逐位一次比较,即可得出大小。
from itertools import zip_longest
def solution(version1, version2):
# 将版本号按点号分割成修订号列表
v1 = version1.split('.')
v2 = version2.split('.')
# 使用 zip_longest 来处理不同长度的修订号列表
for rev1, rev2 in zip_longest(v1, v2, fillvalue='0'):
# 将修订号转换为整数并进行比较
if int(rev1) < int(rev2):
return -1
elif int(rev1) > int(rev2):
return 1
# 如果所有修订号都相等,返回 0
return 0
if __name__ == "__main__":
# 添加你的测试用例
print(solution("0.1", "1.1") == -1)
print(solution("1.0.1", "1") == 1)
print(solution("7.5.2.4", "7.5.3") == -1)
print(solution("1.0", "1.0.0") == 0)
游戏队友搜索
问题描述
在一款多人游戏中,每局比赛需要多个玩家参与。如果发现两名玩家至少一起玩过两局比赛,则可以认为这两名玩家互为队友。现在你有一份玩家(通过玩家ID标识)和比赛局次(通过比赛ID标识)的历史记录表,目标是帮助某位指定玩家找到所有符合条件的队友。
例如,已知以下比赛历史记录:
| 玩家ID | 游戏ID
测试样例
样例1:
输入:
id = 1, num = 10, array = [[1,1], [1,2], [1,3], [2,1], [2,4], [3,2], [4,1], [4,2], [5,2], [5,3]]输出:[4, 5]
样例2:
输入:
id = 2, num = 6, array = [[2,1], [2,3], [1,1], [1,2], [3,1], [4,3]]输出:[]
样例3:
输入:
id = 3, num = 8, array = [[3,1], [3,2], [3,3], [4,1], [5,2], [6,3], [7,1], [7,2]]输出:[7]
题解
数据结构选择: 使用一个HashMap<Integer, Integer>来存储每个潜在队友与指定玩家共玩过的游戏次数。键是队友的玩家ID,值是他们共玩游戏的次数。
遍历游戏记录: 遍历整个二维数组array。 对于每一个记录,检查它是否属于指定玩家。如果是,则继续处理同一局游戏中的其他参与者。
更新队友计数: 如果当前记录是关于指定玩家的,那么在同一个游戏ID下的其他所有玩家都是潜在队友。 更新这些玩家在HashMap中的计数。如果该玩家之前没有出现过,则初始化为1;否则,在原有基础上加1。
筛选符合条件的队友: 在遍历结束后,我们有了每个玩家与指定玩家共玩游戏的次数。 筛选出那些共玩游戏次数大于等于2的玩家,并将它们添加到结果列表中。
返回结果: 将结果列表转换成数组形式并排序后返回。
def solution(id, num, array):
# 使用字典来存储每个玩家与指定玩家共同参与的游戏次数
teammate_games = {}
# 遍历游戏记录数组
for record in array:
p_id = record[0]
g_id = record[1]
# 如果当前记录是关于指定玩家的
if p_id == id:
# 检查同一场比赛中的其他玩家
for other_record in array:
other_p_id = other_record[0]
other_g_id = other_record[1]
# 确保不是同一个玩家,并且是在同一场比赛
if other_p_id != id and other_g_id == g_id:
# 更新队友游戏次数
if other_p_id in teammate_games:
teammate_games[other_p_id] += 1
else:
teammate_games[other_p_id] = 1
# 创建结果列表
result = []
for player_id, count in teammate_games.items():
if count >= 2:
result.append(player_id)
# 将结果列表排序
result.sort()
return result
if __name__ == "__main__":
# Add your test cases here
print(
solution(
1,
10,
[
[1, 1],
[1, 2],
[1, 3],
[2, 1],
[2, 4],
[3, 2],
[4, 1],
[4, 2],
[5, 2],
[5, 3],
],
)
== [4, 5]
)
- 使用字典存储共同参与的游戏次数:我们使用Python的字典
teammate_games来存储每个玩家与指定玩家共同参与的游戏次数。 - 遍历游戏记录:我们遍历
array,检查每个记录是否是关于指定玩家的。 - 检查同一场比赛中的其他玩家:对于指定玩家参与的每场比赛,我们再次遍历
array,检查是否有其他玩家也参与了同一场比赛。 - 更新队友游戏次数:如果找到其他玩家参与了同一场比赛,我们更新字典中的计数。
- 筛选结果:我们遍历字典,筛选出与指定玩家共同参与至少两场比赛的玩家,并将结果排序后返回。