给定一个数组,要求任意两个数组和等于给定数,并返回下标。重构pop和push方法

文章讲述了如何使用哈希表解决寻找数组中和为目标值的两个元素的下标问题,以及如何重构JavaScript的pop()和push()方法。方法1利用哈希表提高查找效率,方法2使用双层循环。同时展示了重构后的pop()和push()方法的实现。
摘要由CSDN通过智能技术生成

1.给定一个数组nums=[2,5,7,11],要求任意两个数组元素和等于指定的值target=9;并返回他们下标,return[0,2]


/**
 * 方法1:
 */
var arr = [2,5,7,11],target = 9
function twonum(arr, target) {
    const map = new Map();
    for (var i = 0; i < arr.length;i++){
        const complement = target - arr[i];
        if(map.has(complement)){
            return [map.get(complement),i]
        }
        map.set(arr[i],i)
    }
}
console.log(twonum(arr,target));  
// Expected output: [ 0, 2 ]
return [map.get(complement), i];这一行的意思是返回一个数组,其中包含两个元素。第一个元素是map.get(complement),它表示从哈希表map中获取与当前元素的差值complement对应的索引。第二个元素是i,它表示当前元素的索引。
map.get(complement)的作用是从哈希表map中获取与当前元素的差值complement对应的索引。如果哈希表中存在这个差值,则返回对应的索引;否则返回undefined。
例如,在上面给出的示例代码中,当遍历到数组中第三个元素(即7)时,计算出的差值为2(即9-7=2)。由于哈希表中存在键为2的项(即第一个元素),因此map.get(complement)返回0(即第一个元素的索引)。
map.has(complement)的作用是检查哈希表map中是否存在键为complement的项。如果存在,则返回true;否则返回false。
map.set(nums[i], i),我们首先计算出目标值与当前元素的差值complement,然后使用map.has(complement)检查哈希表中是否存在这个差值。如果存在,则返回对应的索引和当前元素的索引。否则,将当前元素及其索引存入哈希表中。

/**
 * 方法2:
 */

var arr = [2,5,7,11],target = 9
function twonum(arr, target) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if(arr[i]+ arr[j] === target) {
                return [i,j];
            }
        }
    }
}
console.log(twonum(arr, target)); 
// Expected output: [ 0, 2 ]

2.重构pop() 方法

Array.prototype.newpop= function (){
    if(this.length==0){
        return undefined;
    }
    const lastElement = this[this.length-1];
    this.length = this.length - 1;
    return lastElement;
}
var arr = [1,2,3,4,5,6,7];
console.log(arr.newpop());
console.log(arr); 
// Expected output:7
[ 1, 2, 3, 4, 5, 6 ]

3.重构push方法

 Array.prototype.myPush = function(...arguments){
    	// [1 2 3,] this[this.length]
    	// 遍历调用myPush实际参数  把实际参数放在数组的末尾下一项
    	for(i=0;i<arguments.length;i++){
    		this[this.length]=arguments[i]
    	}
    	return this.length
    }
    var arr = ['hello','10',25];
    var res = arr.myPush('tom','terry');
    console.log(res,arr);
    
    function fc(a,b){
    	// console.log(a,b)
    	// 函数内部属性 arguments 专门保存实际参数的类数组对象
    	console.log(arguments[3])
    }
    fc(1,2,3,4,5)
    // Expected output:
    5 [ 'hello', '10', 25, 'tom', 'terry' ]
    4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值