有没有更有效的方法来编码这个"2 Sum"问题



给定一个整数数组,找到两个数字,使它们加起来成为一个特定的目标数字。

函数twoSum应该返回两个数字的索引,使得它们加起来达到目标,其中index1<index2.请注意,您返回的答案(index1和index2(不是零。把这两个数字按顺序放在一个数组中,然后从函数中返回数组(查看函数签名会让事情变得更清楚(。请注意,如果不存在对,则返回空列表。

如果存在多个解决方案,则输出index2最小的解决方案。如果有多个具有最小index2的解决方案,请从中选择具有最小index1的解决方案。

twoSum : function(A, B){
        var tempA = A;
        var index1 = [];
        var index2 = [];
        var Results = [];
        var diff = A.length/2;
        
        for(var i = 0; i < A.length - 1; i++){
            var temp = B - A[i];
            for(var j = i; j < A.length - 1; j++){
                if(temp == A[j]){
                    if(j - i > 0){
                        if(j < Results[1] || Results.length == 0){
	                    	if(A[j] != A[Results[1]-1] && A[i] != A[Results[0]-1]){
	                    		Results[0] = i + 1;
	                            Results[1] = j + 1; 
	                    	}
                        }
                    }
                }
            }
        }
        return Results;
    }

您可以对一个对象采用单循环方法来存储丢失的值。

function find(array, sum) {
    var hash = {},
        i = 0;
        
    while (i < array.length) {
        const value = array[i++];
        if (value in hash) return [hash[value], i];
        if (!(sum - value in hash)) hash[sum - value] = i;
    }
}
console.log(find([2, 4, 2, 3, 7, 6, 5, 3, 4], 8));

最新更新