मैं जावास्क्रिप्ट में इस समस्या को हल करने का प्रयास कर रहा हूं: जावास्क्रिप्ट में एक सरणी और एक मान को देखते हुए, पता लगाएं कि सरणी में एक ट्रिपलेट है जिसका योग दिए गए मान के बराबर है। यदि सरणी में ऐसा ट्रिपल मौजूद है, तो ट्रिपल प्रिंट करें और सही लौटें। अन्यथा झूठी वापसी।

अब, मैंने कुछ कोड लिखा है, और किसी कारण से, यह ठीक से काम नहीं कर रहा है। यहाँ कोड है:

A = [1, 4, 45, 6, 10, 8];
sum = 15;
x = A.length;


function find3Numbers(A, x, sum) {
for (i=0; i<(x-2); i++) {
for (j=i+1; j<(x-1); j++) {
for (k=j+1; x; k++) {
   if (A[i] + A[j] + A[k] == sum) {
     console.log(A[i]);
     console.log(A[j]);
     console.log(A[k]);
     return true
    }
   return false
    }
  }
 }
} 

 console.log(find3Numbers(A, x, sum));

अब जब मैं कोड चलाता हूं, तो मुझे "झूठा" संदेश मिलता है। कोई विचार, ऐसा क्यों है?

-1
Coder48 11 पद 2020, 22:54

2 जवाब

सबसे बढ़िया उत्तर

आप तुरंत false लौटते हैं यदि आपके द्वारा आजमाया गया पहला ट्रिपल मेल नहीं खाता है, जब आपको सभी लूप समाप्त होने के बाद ही ऐसा करना चाहिए।

A = [1, 4, 45, 6, 10, 8];
sum = 15;
x = A.length;


function find3Numbers(A, x, sum) {
  for (i = 0; i < (x - 2); i++) {
    for (j = i + 1; j < (x - 1); j++) {
      for (k = j + 1; x; k++) {
        if (A[i] + A[j] + A[k] == sum) {
          console.log(A[i]);
          console.log(A[j]);
          console.log(A[k]);
          return true
        }
      }
    }
  }
  return false;
}

console.log(find3Numbers(A, x, sum));
1
Unmitigated 11 पद 2020, 22:58

O(n^3) के बजाय O(n^2) समय जटिलता के लिए पहले से सरणी को सॉर्ट करने पर विचार करें।

ध्यान दें: O(nlog(n) + n^2) बिना किसी लक्षण के O(n^2) के समान है।

const find3Numbers = (nums, nums_length, target) => {
    nums.sort((a, b) => a - b);
    let i = 0;
    while (i < nums_length - 2) {
        let j = i + 1;
        let k = nums_length - 1;
        while (j < k) {
            curr_sum = nums[i] + nums[j] + nums[k];
            if (curr_sum < target) {
                j++;
                while (j < k && nums[j] == nums[j - 1]) {
                    j++;
                }
            } else if (curr_sum > target) {
                k--;
                while (j < k && nums[k] == nums[k + 1]) {
                    k--;
                }
            } else {
                return [nums[i], nums[j], nums[k]];
            }
        }
        i++;
        while (i < nums_length - 2 && nums[i] == nums[i - 1]) {
            i++;
        }
    }
    return [-1, -1, -1];
}


const A = [1, 4, 45, 6, 10, 8];
const x = A.length;
const sum = 15;
console.log(find3Numbers(A, x, sum));
1
Sash Sinha 11 पद 2020, 23:16