【问题标题】:checking an array if sum of any elements in array equal to given value如果数组中任何元素的总和等于给定值,则检查数组
【发布时间】:2019-03-27 02:13:08
【问题描述】:
[1,2,3,6], 3 = True <== 1+2=3
[1,2,3,6], 9 = True <== 3+6=9
[1,2,3,6], 5 = True <== 2+3=5
[1,2,3,6], 10 = False <== 1+2, 2+3, 3+6, 6+1 not equal to 10
[6,2,3,1], 10 = False <== 6+2, 2+3, 3+1, 1+6 not equal to 10
[6,3,3,1], 6 = True <== 3+3=6

JavaScript 是首选
如果给定的和等于数组中任意两个元素的和,则函数需要返回true;否则函数需要返回false。

【问题讨论】:

标签: javascript arrays


【解决方案1】:

这是一种非常简单的方法,可以检查数组中的两个数字是否等于一个值。请注意,这只允许 distinct 和(与自身相加的数字不算数)。

function test(n, arr){
   return arr.some((item, i) => arr.slice(i+1).includes(n-item))
}

let arr = [1, 2, 3, 6]

console.log(test(5, arr))   // true 2+3
console.log(test(4, arr))   // true 1+3
console.log(test(12, arr))  // false because 6 + 6 doesn't count
console.log(test(10, arr))  // false no sums

如果数组都是正数,您可以在短路情况下添加一个额外的测试,这样的情况不可能是真的:

 return arr.some((item, i) => n > item && arr.slice(i+1).includes(n-item))

如果您想允许数字与它们相加,只需针对整个数组进行测试:

 return arr.some((item, i) => arr.includes(n-item))

【讨论】:

    【解决方案2】:

    您将不得不遍历值数组。不熟悉javascript所以这里是java函数中的代码:

    public boolean checkSum(){
      int sumValue = 10; //value you want to check, could be passed in as a parameter
      int arr[4] = {1,2,4,6};
      for (int n = 0; n < arr.length; n++){
        for (int x = 0; x < arr.length; x++){
          if ( (arr[n] + arr[x] == sumValue) && (n != x) ){ //need to ensure same slot is being added
            return true;
          }
        }
      }
      return false;
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      您可以使用函数some 来检查至少一个操作是true

      此方法遵循您的用例

      let check = (sum, arr) => arr.concat(arr[0]).some((n, i, a) => (n + a[i+1]) === sum);
          
      console.log(check(3, [1,2,3,6]));
      console.log(check(9, [1,2,3,6]));
      console.log(check(5, [1,2,3,6]));
      console.log(check(10, [1,2,3,6]));
      console.log(check(10, [6,2,3,1]));
      console.log(check(6, [6,3,3,1]));
      console.log(check(7, [3,1,2,4]));
      console.log(check(7, []));
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      如果您需要检查该数组中的任意两个值,请遵循以下方法:

      let check = (sum, arr) => {
        let inner = arr.concat(arr[0]);
        for (let i = 0, {length} = inner; i < length; i++) {
          for (let j = i + 1, {length} = inner; j < length; j++) {
            if (inner[i] + inner[j] === sum) return true;
          }
        }
        return false;
      };
          
      console.log(check(3, [1,2,3,6]));
      console.log(check(9, [1,2,3,6]));
      console.log(check(5, [1,2,3,6]));
      console.log(check(10, [1,2,3,6]));
      console.log(check(10, [6,2,3,1]));
      console.log(check(6, [6,3,3,1]));
      console.log(check(7, [3,1,2,4]));
      console.log(check(4, [1,1,3,7]));
      console.log(check(7, []));
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

      • check(4, [1,2,3,6]) 返回 false。
      • 也许我理解错了,但不应该是真的,因为 1 + 3 = 4
      • 我读到:if given sum is equal to sum of **any** two elements in the array, function need to return true 给定的 sum: 4 等于数组中两个元素 [1, 3] 的和。
      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多