您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页【leetcode每日一题】——24. 找出可整除性得分最大的整数python题解

【leetcode每日一题】——24. 找出可整除性得分最大的整数python题解

来源:百家汽车网

题目:

给你两个下标从 0 开始的整数数组 nums 和 divisors 。

divisors[i] 的 可整除性得分 等于满足 nums[j] 能被 divisors[i] 整除的下标 j 的数量。

返回 可整除性得分 最大的整数 divisors[i] 。如果有多个整数具有最大得分,则返回数值最小的一个。

示例 1:

输入:nums = [4,7,9,3,9], divisors = [5,2,3]
输出:3
解释:divisors 中每个元素的可整除性得分为:
divisors[0] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 5 整除。
divisors[1] 的可整除性得分为 1 ,因为 nums[0] 能被 2 整除。 
divisors[2] 的可整除性得分为 3 ,因为 nums[2]、nums[3] 和 nums[4] 都能被 3 整除。 
因此,返回 divisors[2] ,它的可整除性得分最大。

示例 2:

输入:nums = [20,14,21,10], divisors = [5,7,5]
输出:5
解释:divisors 中每个元素的可整除性得分为:
divisors[0] 的可整除性得分为 2 ,因为 nums[0] 和 nums[3] 都能被 5 整除。
divisors[1] 的可整除性得分为 2 ,因为 nums[1] 和 nums[2] 都能被 7 整除。
divisors[2] 的可整除性得分为 2 ,因为 nums[0] 和 nums[3] 都能被5整除。 
由于 divisors[0]、divisors[1] 和 divisors[2] 的可整除性得分都是最大的,因此,我们返回数值最小的一个,即 divisors[2] 。

示例 3:

输入:nums = [12], divisors = [10,16]
输出:10
解释:divisors 中每个元素的可整除性得分为:
divisors[0] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 10 整除。
divisors[1] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 16 整除。 
由于 divisors[0] 和 divisors[1] 的可整除性得分都是最大的,因此,我们返回数值最小的一个,即 divisors[0] 。

提示:

  • 1 <= nums.length, divisors.length <= 1000
  • 1 <= nums[i], divisors[i] <= 10**9

 方法一:双重循环并维护最大值的得分和最小值的数值

q = -inf
for i in range(len(divisors)):
    e = 0
    for j in range(len(nums)):
        if nums[j] % divisors[i] == 0:
            e += 1
    if e > q:
        q = e
        k = divisors[i]
    if e == q:
        k = min(k,divisors[i])
return k

由于是简单题所以第一想到的就是暴力,时间复杂度是o(n*m)空间复杂度是o(1)的

n是divisors的长度,m为nums长度,由于仅仅用了若干变量所以未o(1)的空间复杂度

优化:

我们不难想到,如果divisors的数比nums的大,那么肯定是整除不了的,利用这个性质我们是否能够少跑一些数据呢?

q = -inf
nums.sort(reverse = True)
    for i in range(len(divisors)):
        e = 0
        for j in range(len(nums)):
            if divisors[i] > nums[j]:
                break
            if nums[j] % divisors[i] == 0:
                e += 1
        if e > q:
            q = e
            k = divisors[i]
        if e == q:
            k = min(k,divisors[i])
return k

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务