本人是个新手,做Python每日练习的时候对这道题有点疑惑,水平有限,不知道怎么优化,望大佬们赐教。
题目描述
已知存在集合A包含n个整数,从1到n。 存在m个整数a[1..m]。 在集合A中去除这m个整数的的倍数。 输出集合中包含的元素的个数。
输入描述:
第一行输入n,m。(1<=n<=1e9,1<=m<=10) 第二行输入m个32位整数。
输出描述:
输出集合中包含元素的个数。
我用了以下代码实现,从结果上看是实现了,但是提交的时候提示超时了,大概是1050ms,题目要求是1000ms,我改了几次,还是没有比这个更快的了:
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, m, arr):
result = None
# TODO: 请在此编写代码
arr_n = []
#初始化arr_n集合,为空集合,用作记录1-n的集合
for i in range(1,n) :
arr_n.append ( i )
#给arr_n填充内容,range()函数第一个参数是起点,第二个参数是终点,第三个参数是步长,返回的是一组数
for temp_n in arr_n : #在arr_n中取了一个temp_n的局部变量,用于循环中
for temp_m in arr : #在arr_m中取了一个temp_m的局部变量,用于循环中
if temp_n % temp_m == 0 :
del arr_n[arr_n.index(temp_n)] #用集合的index函数,先查找该元素的索引
result = len ( arr_n )
return result
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
m = int(arr_temp[1])
arr = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(n, m, arr)
print(result)
望大佬赐教