所以,我试图解决这个问题在leetcode:
你有一个整数集s,它最初包含从1到n的所有数字。不幸的是,由于一些错误,s中的一个数字与集合中的另一个数字重复,这导致一个数字重复,另一个数字丢失。
系统将为您提供一个整数数组nums,表示此集合在出错后的数据状态。
求出出现两次的数字和缺少的数字,并以数组形式返回它们。
例一:
Input: nums = [1,2,2,4]
Output: [2,3]
例二:
Input: nums = [1,1]
Output: [1,2]
限制条件:
2 <= nums.length <= 10e4
1 <= nums[i] <= 10e4
你会发现我写的代码在下面。所以,我遇到的问题是关于大列表超出时间。实际上,mysolution工作得很好(在33/49的情况下),我如何优化我的代码或得到更好的结果。
class Solution(object):
def findErrorNums(self, nums):
nums.sort()
rep_miss = []
for i in range(len(nums)) :
for j in range(i+1, len(nums)) :
if nums[i] == nums[j] :
rep_miss.append(nums[i])
for i in range(1, len(nums)+1) :
if i not in nums : #and abs(rep_miss[0]-i ==1) :
rep_miss.append(i)
return rep_miss
祝你愉快!
2条答案
按热度按时间mfuanj7w1#
在Python中,总是值得寻找不涉及大循环和索引的方法,例如使用计数器、字典和集合。
其输出[2,3]
avwztpqn2#
或者,您也可以尝试这样做,一旦您得到了 * 完整 * 的列表,那么答案只是做一个简单的 * 数学:*