一些简单的算法题目
1. 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回
input:[1, 2, 2, 3, 4, 2, 2], 2 output: [1, 3, 4]
function removeWithoutCopy(arr, item) {
var stack = [], last;
while (arr.length > 0) {
last = arr.pop();
if (last !== item) {
stack.push(last);
}
}
while (stack.length > 0) {
arr.push(stack.pop());
}
return arr;
}
https://www.nowcoder.com/practice/a93dd26ebb8c425d844acc17bcce9411?tpId=6&tqId=10952&rp=1&ru=%2Fta%2Fjs-assessment&qru=%2Fta%2Fjs-assessment%2Fquestion-ranking
2. 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
input: [1, 2, 3, 4], 'z', 2
output: [1, 2, 'z', 3, 4]
function insert(arr, item, index) {
var a = [], n = arr.length;
for (var i = 0; i< n+1; i++) {
a.push(null);
}
for (var i = 0, j = 0; i < n; j++) {
if (index === i) {
a[j] = item;
index = -1; // so that index !=i
} else {
a[j] = arr[i++];
}
}
return a;
}
3. 统计数组 arr 中值等于 item 的元素出现的次数
input: [1, 2, 4, 4, 3, 4, 3], 4
output: 3
function count(arr, item) {
function _count(arr, n, item) {
if (n===0) {
return 0;
}
if (n === 1) {
return (arr[0] === item)?1:0;
}
return _count(arr, n-1, item) + (arr[n-1] === item ? 1:0);
}
return _count(arr, arr.length, item);
}
4. 找出数组 arr 中重复出现过的元素
input: [1, 2, 4, 4, 3, 3, 1, 5, 3]
output: [1, 3, 4]
function duplicates(arr) {
function _duplicate(arr, n, a) {
if (n === 0 || n === 1) {
return a;
}
var last = arr[n - 1];
for (var i = 0; i < n - 1; i++) {
if (last === arr[i]) {
if (a.indexOf(last) < 0) {
a.push(last);
}
}
}
_duplicate(arr, n - 1, a);
}
var a = [];
_duplicate(arr, arr.length, a);
return a;
}
5. 为 Array 对象添加一个去除重复项的方法 (注意:NaN !== NaN, {} !== {} )
input: [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
output: [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
Array.prototype.uniq = function() {
var a = [], flag = true; // NaN, {}
this.forEach(function(item) {
if (a.indexOf(item)<0) {
// NaN !== NaN, {} !== {}
if (item !== item) {
if (flag) {
a.push(item);
flag = false;
}
} else {
a.push(item);
}
}
});
return a;
}
var a = [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
console.log(a.uniq());
浙公网安备 33010602011771号