Python:每日一题 359
本帖最后由 zltzlt 于 2020-3-26 13:27 编辑今天的题目:
数组 nums 原本包含从 1 到 n 的整数。但因为数据错误,导致 nums 丢失了一个整数并且有一个元素重复。
首先寻找到重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
示例 1:
输入:nums =
输出:
示例 2:
输入:nums =
输出:
示例 3:
输入:nums =
输出:
{:10_298:}欢迎大家一起答题!{:10_298:} 本帖最后由 永恒的蓝色梦想 于 2020-3-26 13:54 编辑
class Solution:
def findErrorNums(self, nums: List) -> List:
length=len(nums)+1
temp=*length
result=[]
for i in nums:
temp+=1
for i in range(1,length):
if 2==temp:
twice=i
elif not temp:
lost=i
return 本帖最后由 flamezyy 于 2020-3-27 12:25 编辑
def f359(nums):
for index in range(len(nums)-1):
if nums == nums:
dup = nums
break
return( + list(set(x for x in range(1, len(nums)+1)) - set(nums)))
还是来简约一点的吧 def fun359(lst):
result=[]
lst.sort()
for i in lst:
if lst.count(i)==2:
result.append(i)
break
k=set(range(1,lst[-1]+1))-set(lst)
result.append(k.pop())
return result
麻烦版主把357,358题测一下吧 本帖最后由 BngThea 于 2020-3-28 13:48 编辑
可以用numpy吗
import numpy as np
def get_res(nums):
nums = np.array(nums)
org = np.arange(1,len(nums)+1)
ind = np.nonzero(nums-org)
return ,ind+1]
BngThea 发表于 2020-3-26 13:53
可以用numpy吗
可以。 fan1993423 发表于 2020-3-26 13:50
麻烦版主把357,358题测一下吧
版主最近挺忙的{:10_248:} 本帖最后由 March2615 于 2020-3-26 14:24 编辑
def daily359(nums: list) -> list:
d = * (len(nums) + 1)
a = b = 0
for i in nums:
d += 1
if d == 2:
a = i
for i in range(1, len(nums) + 1):
if d == 0:
b = i
break
return
再来一种更容易想到的
def daily359_2(nums: list) -> list:
prefect_sum = sum(range(len(nums) + 1))# 理论上的总和
# prefect_sum = (n + 1) * n // 2
missing_sum = sum(set(nums))# 缺少一个值(删去重复数字)的总和
missing_num = prefect_sum - missing_sum# 缺少的数字
repeat_num = sum(nums) + missing_num - prefect_sum
return 本帖最后由 塔利班 于 2020-3-26 14:29 编辑
nums是固定排好序且重复的是挨着的? def f359(nums):
sn=set(nums)
s=set(range(1,len(nums)+1))
return
def find_x_y(nums):
lens = len(nums)
x = 0
for i in range(1, lens):
if nums == nums:
x = nums
sum_array1 = sum(nums)
sum_array2 = (lens+1)*lens//2
y = x - sum_array1 + sum_array2
return x, y 塔利班 发表于 2020-3-26 14:28
nums是固定排好序且重复的是挨着的?
排过序的 永恒的蓝色梦想 发表于 2020-3-26 13:38
228 ms 本帖最后由 TJBEST 于 2020-3-26 20:30 编辑
不知道sum的速度如何,如果sum比遍历更快,此法还是可以的。
结果应该不错,但是速度未知,纯数学思想没用到遍历。
def fun359(nums):
M = len(nums)
S_standard = M*(M+1)//2
self_Sum = sum(nums)
delta_sum = self_Sum - S_standard
result = []
if delta_sum < 0:
head = 0
tail = M
while True:
Mid = (head+tail)//2
if sum(nums[:Mid]) == (1+Mid)*Mid//2:
if nums == Mid:
result.append(Mid)
break
else:
head = Mid
else:
tail = Mid
else:
head = 0
tail = M
while True:
Mid = (head+tail)//2
if sum(nums) == (Mid + 1 + M)*(M - Mid)//2:
if nums == Mid+1:
result.append(Mid+1)
break
else:
tail = Mid
else:
head = Mid
result.append(result - delta_sum)
return result 版主 输入 可能是 【1,1,2,4】还是片【1,2,1,4】,排好序了? zltzlt 发表于 2020-3-26 17:34
排过序的
645题不是说给定的数组是无序的吗?{:10_327:} def myfun(arg):
list1 = []
for i in arg:
if arg.count(i) > 1:
list1.append(i)
arg.pop(arg.index(i))
for i in range(2,len(arg)):
if arg != arg + 1:
list1.append(arg + 1)
break
return list1
fun = myfun()
print(fun) def solve(nums):
n = len(nums)
res =
for i in range(1, n+1):
if nums.count(i) == 2:
res = i
if nums.count(i) == 0:
res = i
return res 本帖最后由 sYMMetrY 于 2020-3-28 22:31 编辑
def q359(num):
num.sort()
for each in range(1, len(num)+1):
if each != num:
return(,each])上面一段代码并未考虑周全,当重复数字与缺失数字不相连的情况,因此该进入下:
num =
def q359(num):
num.sort()
for each in range(1, len(num)+1):
if each != num:
if sum(num) - sum(range(1, len(num)+1)) > 0:
#当原始列表中数字之和与未丢失数据的数字之和的差值大于0,则缺失数字必然小于等于重复数字,则此时出现不等式中的each为缺失数据,重复数字为缺失数字与差值(正)的和
return()
else:
#当原始列表中数字之和与未丢失数据的数字之和的差值小于0,则缺失数字必然大于等于重复数字,则此时出现不等式中的each-1为重复数字,缺失数据为重复数字与差值(正)的和
return([(each-1),(each -1) - (sum(num) - sum(range(1, len(num)+1)))])
print(q359(num))
nums =
list1 = []
for i in range(len(nums)):
if nums == nums:
list1.append(nums)
break
for i in range(1,len(nums)+1):
if i != nums:
list1.append(i)
break
print(list1)
小白~~你们代码格式是怎么回复的啊