【问题标题】:Is there any more efficient way to code this "2 Sum" Questions有没有更有效的方法来编码这个“2 Sum”问题
【发布时间】:2020-03-06 14:25:08
【问题描述】:

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

函数 twoSum 应该返回两个数字的索引,以便它们相加到目标,其中 index1

如果存在多个解,则输出 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;
    }

【问题讨论】:

  • 你有一些数组的例子和想要的结果吗?顺便说一句,为什么索引不是从零开始的?
  • 你可以从不计算和存储你不使用的变量开始。
  • @NinaScholz 是的,返回结果不是从零开始的,取决于我得到的问题

标签: javascript


【解决方案1】:

您可以对对象采用单循环方法来存储缺失值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多