一些简单的算法题目
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());