前言
本篇写的是两个经典问题的算法:数组去重和随机样本
一、数组去重
题目:去掉数组中的重复项
思路:
- 准备一个空结果数组
- 遍历原数组
- 如果遍历到的项不在结果数组中,则推入结果数组
代码如下(示例):
<script>
var arr = [1, 1, 1, 2, 2, 3, 3, 3, 1];
//结果数组
var result = [];
//遍历原数组
for (var i = 0; i < arr.length; i++) {
//判断遍历到的这个项是否存在在结果数组中,如果不在就推入
//includes()方法用来判断某项是否在数组中
if (!result.includes(arr[i])) {
result.push(arr[i]);
}
}
console.log(result);
</script>
二、随机样本
题目:请随机从原数组中取3项
思路:
- 准备一个空结果数组
- 遍历原数组
- 随机选择一项,推入结果数组
- 将原数组这项删除
代码如下(示例):
<script>
var arr = [1, 2, 4, 5, 6, 3, 7];
// 结果数组
var result = [];
// 遍历数组
for (var i = 0; i < 3; i++) {
//随机选择一项的下标[0,arr.length-1],数组的下标0~arr.length-1
//[a,b]区间的随机数是parseInt(Math.random() * (b+1-a) + a)
var n = parseInt(Math.random() * arr.length);
//把这项推入到结果数组
result.push(arr[n]);
//删除这项,防止重复 被随机生成
arr.splice(n, 1);
}
console.log(result);
</script>
总结
看到题目不要着急敲代码,先理清解题思路,根据思路步骤写代码,逐步推敲。
深刻理解算法,多推敲算法,不能硬记算法。