概述
昨天非常忙,上午去做体检,下午去拿报告,晚上和老刘吃撸了一个串,深入交流生活的不易,岁月变化的快,话回算法题,今天的题目比较容易,花了一会就能写出来。
今天这题是:2644. 找出可整除性得分最大的整数
题目
给你两个下标从 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] <= 109
解题思路
1、循环计算nums[j] % divisors[i]==0,说明可以整除。
2、判断能除的总数,能除数次数大于上一次最大的被除总数,大于则保存覆盖,每次循环判断,保留最大的被除总数和数值;
代码
class Solution {public int maxDivScore(int[] nums, int[] divisors) {int ans = 0;int maxScore = -1;for (int divisor : divisors) {int count = 0;for (int num : nums) {if (num % divisor == 0) {count++;}}if (count > maxScore || (count == maxScore && divisor < ans)) {maxScore = count;ans = divisor;}}return ans;}
}
下周就要上班了,以后每天挑战的机会可能越来越少,但是自己也尽量都能每天抽点时间来完成,为生活折腰,为碎银几两努力,努力的打工人~