|
27 | 27 | * * |
28 | 28 | ***************************************************************************************/ |
29 | 29 |
|
30 | | -function ArrayAdditionI(arr) { |
| 30 | +function ArrayAdditionI(arr) { |
| 31 | + const largest = Math.max(...arr); |
| 32 | + arr.splice(arr.indexOf(largest), 1); |
31 | 33 |
|
32 | | - arr.sort(function(a,b){return a - b}); |
33 | | - var maxNum = arr.pop(); |
34 | | - var tot = 0; |
35 | | - |
36 | | - for (var i = 0; i < arr.length; i++){ |
37 | | - tot += arr[i]; |
38 | | - for (var j = 0; j < arr.length; j++){ |
39 | | - if (i != j) { |
40 | | - tot += arr[j]; |
41 | | - if (tot == maxNum) { |
42 | | - return true; |
43 | | - } |
| 34 | + function canSum(target, nums) { |
| 35 | + if (target === 0) return true; |
| 36 | + if (target < 0) return false; |
| 37 | + for (let i = 0; i < nums.length; i++) { |
| 38 | + const remaining = nums.slice(); |
| 39 | + remaining.splice(i, 1); |
| 40 | + if (canSum(target - nums[i], remaining)) { |
| 41 | + return true; |
44 | 42 | } |
45 | 43 | } |
46 | | - |
47 | | - for (var k = 0; k < arr.length; k++) { |
48 | | - if (i != k) { |
49 | | - tot -= arr[k]; |
50 | | - if (tot == maxNum) { |
51 | | - return true; |
52 | | - } |
53 | | - } |
54 | | - } |
55 | | - tot = 0; |
| 44 | + return false; |
56 | 45 | } |
57 | | - |
58 | | - return false; |
59 | | - |
| 46 | + |
| 47 | + return canSum(largest, arr); |
60 | 48 | } |
| 49 | + |
| 50 | +// Test cases with console.log |
| 51 | +console.log(ArrayAdditionI([4, 6, 23, 10, 1, 3])); // Expected output: true |
| 52 | +console.log(ArrayAdditionI([4, 6, 12, 10, 1, 3])); // Expected output: false |
0 commit comments