题目:
给你两个下标从 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
java代码:
class Solution {
public int maxDivScore(int[] nums, int[] divisors) {
//第一步,新建一个数组score,存放divisors对应的每个数的可整除性得分
int m = nums.length;
int n = divisors.length;
int[] score = new int[n];
for(int i = 0;i < n;i++){
int count = 0;
for(int j = 0;j < m;j++){
if(nums[j] % divisors[i] == 0){
count++;
}
}
score[i] = count;
}
//第二步,遍历score数组,找出最大的那个,对应索引的divisors的值就是答案
int ans = divisors[0];
int t = score[0];
for(int i = 1;i < score.length;i++){
if(score[i] > t){//遇到比分更大的,将最大值t重新赋值,将ans置为对应divisors的值
ans = divisors[i];
t = score[i];
}else if(score[i] == t){//如果比分相同了,取小的那个
ans = Math.min(ans,divisors[i]);
}
}
return ans;
}
}
网友评论