2644. 可整除性得点が最大の整数を見つける#
0 から始まる 2 つの整数配列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]を返します。
ヒント:
シミュレーション#
class Solution {
public:
int maxDivScore(vector<int>& nums, vector<int>& divisors) {
int res = INT_MAX, cnt = 0;
for (const auto &divisor : divisors) {
int cur = 0;
for (const auto &num : nums) {
cur += (num % divisor == 0);
}
if (cur == cnt) {
res = min(res, divisor);
} else if (cur > cnt) {
res = divisor;
cnt = cur;
}
}
return res;
}
};