一些简单的算法题目

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());

  

 

posted @ 2018-06-29 10:19  zhanghui_ming  阅读(215)  评论(0编辑  收藏  举报