一、题目描述
疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。
黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色。
为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这种颜色中最小的那个数整除。
现在请你帮帮小朋友们,算算最少需要多少种颜色才能给这N个数进行上色。
二、输入描述
第一行有一个正整数N,其中。
第二行有N个int型数(保证输入数据在[1,100]范围中),表示黑板上各个正整数的值。
7
58 14 20 67 41 4 63
三、输出描述
输出只有一个整数,为最少需要的颜色种数。
6
因为7个数中只有20能被4整除,所以20和4一个颜色,其它的都是不同颜色。
四、解题思路
- 读取输入的正整数个数 N;
- 读取输入的正整数数组 orgStrArr;
- 将 orgStrArr 转换为整数数组 list;
- 对 list 进行排序;
- 初始化变量 minType 为 0,表示最少需要的颜色种数;
- 当 list 不为空时,执行以下步骤:
- 获取 list 的第一个数 first,并从 list 中移除该数;
- 遍历 list 中的每个数,如果可以被 first 整除,则从 list 中移除该数;
- 更新 minType,将颜色种数加一。
- 输出 minType,表示最少需要的颜色种数。
五、JavaScript算法源码
function getColors(input) {
const nums = input.split(" ")
nums.sort((a, b) => a - b); // 先将数组进行排序
const groups = new Array(nums.length).fill(0); // 用来记录每个数所属的组
let colors = 0; // 颜色数量
for (const num of nums) {
let group = -1;
for (let i = 0; i < colors; i++) {
if (num % groups[i] === 0) {
group = i;
break;
}
}
if (group === -1) {
// 如果没有找到能够整除它的数,则将其放入新的一组中
groups[colors++] = num;
} else {
groups[group] = num; // 否则加入已有的组中
}
}
return colors;
}
六、效果展示
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。