हमें एक JavaScript फ़ंक्शन लिखना है जो पहली आर्गुमेंट के रूप में संख्याओं की एक सरणी और दूसरी आर्गुमेंट के रूप में एक अकेली संख्या लेता है। फ़ंक्शन को तब सरणी से तीन ऐसी संख्याओं को चुनना चाहिए, (यदि वे मौजूद हैं) जिनका योग दूसरी आर्गुमेंट द्वारा निर्दिष्ट संख्या के बराबर हो।
फ़ंक्शन को अंत में ऐसी सभी ट्रिपलेट्स की सरणी की सरणी लौटानी चाहिए यदि वे मौजूद हैं, अन्यथा एक खाली सरणी।
उदाहरण
यदि इनपुट सरणी और संख्या है:
const arr = [2, 5, 7, 8, 9, 11, 1, 6]; const sum = 22;
तो आउटपुट होना चाहिए:
const output = [ [ 2, 9, 11 ], [ 5, 6, 11 ], [ 5, 8, 9 ], [ 6, 7, 9 ] ];
उदाहरण
const arr = [2, 5, 7, 8, 9, 11, 1, 6];
const sum = 22;
const threeSum = (arr = [], sum) => {
arr.sort((a,b) => a - b);
const res = [];
for(let i=0; i < arr.length - 2; i++){
if(arr[i] != arr[i-1]){
let left = i + 1;
let right = arr.length - 1;
while (left < right){
const curr = arr[i] + arr[left] + arr[right];
if (curr === sum){
res.push([arr[i], arr[left], arr[right]]);
while(arr[left] == arr[left + 1]) left++
while(arr[right] == arr[right - 1]) right -- // सुनिश्चित करना
कि हमारा समाधान सेट डुप्लिकेट res नहीं रखता
left ++;
right --;
} else if(curr < sum) {
left ++
} else if(curr > sum){
right --
};
};
};
};
return res
};
console.log(threeSum(arr, sum));
आउटपुट
[ [ 2, 9, 11 ], [ 5, 6, 11 ], [ 5, 8, 9 ], [ 6, 7, 9 ] ]