求悉心解答 写思路 :

写一个函数,输入一个数组a,找到里面是否存在三个不同的元素,使得a[i] + a[j] == a[k]。如果能找到输出true,找不到输出false

举例:
> 输入var a1 = [1,5,10,25,9,17,100];输出false
>
> 输入var a2 = [2,99,3,5];可以找到2+3=5,因此输出true
>
>输入var a3 = [1,50,0,5];输出false

求大神讲解

阅读 2.1k
2 个回答
function search(arr) {
    for (var i = 0; i < arr.length; ++i) {
        // 第一层循环列举出所有待计算的左边数字
        var left = arr[i];
        for (var j = i + 1; j < arr.length; ++j) {
            // 枚举出所有参与计算的右边数字,下标位于该数字后面
            var right = arr[j];
            // 将计算结果位于数组中的下标与前面两个数字的下标做对比
            var k = arr.indexOf(left + right);
            // 从你的举例来看该结果不仅不能重复还必须在加数下标的后面,故直接跟下标j比较
            if (k > j) return true;
        }
    }
    return false;
}
console.log(search(a1));
console.log(search(a2));
console.log(search(a2));

可以把数组放到一个MAP里,KEY=INDEX VALUE=数组中的数字
FOR KEY1 IN MAP
FOR KEY2 IN MAP

 IF KEY1 == KEY2
    CONTINUE
 IF MAP.CONTAINS(VALUE1-VALUE2)
    RETURN TRUE
    
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题