每日练习疑惑2022-12-24

本人是个新手,做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)

望大佬赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值