• 一些简单的算法题目


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

      

  • 相关阅读:
    VS2010和VS2015的Dll项目
    Umbraco遇到的问题解决
    EF Code first 和 DDD (领域驱动设计研究)系列一
    Gulp的学习和使用
    .Net开发中的@ 和 using 使用技巧
    异常基础
    正则表达式
    常用类
    泛型设计中<T> 和<E>的区别
    各个服务器启动命令
  • 原文地址:https://www.cnblogs.com/mingzhanghui/p/9242117.html
Copyright © 2020-2023  润新知