前端算法笔试题
- 格式:docx
- 大小:37.46 KB
- 文档页数:4
前端算法笔试题
一、题目描述
某网站有一组整数数据,数据数量不超过1000个,且每个数据的范围在[-10000, 10000]之间。请你设计一个前端算法,实现以下功能:
1. 数据去重:将重复出现的数字去除,仅保留一个。
2. 数据排序:将数据按照从小到大的顺序进行排序。
3. 数据筛选:将数据中所有大于等于0的数字筛选出来,并保持原始顺序不变。
二、算法设计思路
1. 数据去重:使用Set数据结构来进行去重操作。将原始数据逐个插入Set中,利用Set的特性自动去除重复的数字,最后将Set转换为数组格式即可得到去重后的数据。
2. 数据排序:使用快速排序算法来对数据进行排序。选择数组中的一个元素作为基准值,将小于基准值的元素放在左边,大于基准值的元素放在右边,再递归地对左右两部分进行快速排序,最后合并左右两部分即可得到有序数组。
3. 数据筛选:遍历原始数据,将大于等于0的数字筛选出来,并按照出现顺序保存在一个新的数组中。
三、算法实现 ```javascript
function removeDuplicates(arr) {
// 去重
let set = new Set(arr);
return Array.from(set);
}
function quickSort(arr) {
// 排序
if (arr.length <= 1) {
return arr;
}
let pivotIndex = Math.floor(arr.length / 2);
let pivot = arr.splice(pivotIndex, 1)[0];
let left = [];
let right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else { right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
function filterPositiveNumbers(arr) {
// 筛选
let result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= 0) {
result.push(arr[i]);
}
}
return result;
}
// 示例数据
let data = [1, 2, 3, 4, 3, 5, -1, 0, -2, -3, 6, 7, -4, -2, 8, 9, 0, 10];
// 去重
let uniqueData = removeDuplicates(data); // 排序
let sortedData = quickSort(uniqueData);
// 筛选
let filteredData = filterPositiveNumbers(sortedData);
console.log(filteredData);
```
四、算法分析
该算法的时间复杂度主要集中在排序操作上,即快速排序的时间复杂度为O(nlogn)。而去重和筛选操作的时间复杂度均为O(n),所以整体算法的时间复杂度为O(nlogn)。
算法的空间复杂度主要是由去重操作所生成的Set数据结构和排序操作所生成的递归调用栈占用空间。Set数据结构的空间复杂度为O(n),而递归调用栈的空间复杂度为O(logn),所以总的空间复杂度为O(n+logn),即O(n)。
五、总结
通过本文所介绍的前端算法,我们可以实现对一组整数数据的去重、排序和筛选功能。该算法采用去重操作利用Set数据结构,排序操作采用快速排序算法,筛选操作通过遍历原始数据进行判断。算法时间复杂度为O(nlogn),空间复杂度为O(n)。通过合理的算法设计和优化,提高了前端页面的数据处理效率,增强了用户的使用体验。