查找和为给定值的三个数的 JavaScript 程序
我们将编写一个 JavaScript 程序来查找总和等于给定值的三个数。该程序将使用嵌套循环迭代输入数组,并检查是否存在总和等于给定值的三个数。我们的程序将持续搜索三个数,直到找到它或所有可能的组合都被穷尽。这个程序将使我们能够高效且直接地找到总和等于给定值的三个数。
方法
查找总和等于给定值的三个数的方法可以使用以下步骤实现:
将输入数组按升序排序。
循环遍历数组并固定一个元素。
初始化两个指针,一个指向固定元素的下一个元素,另一个指向数组的末尾。
检查三个元素的总和是否等于给定值。
如果总和小于给定值,则递增左指针。
如果总和大于给定值,则递减右指针。重复此过程,直到找到三个数或指针交叉。
示例
给定一个整数数组,我们想要找到总和等于给定值的三个数。这是一个解决此问题的 JavaScript 程序:
function findTriplet(arr, sum) { // First, we sort the array in ascending order arr.sort((a, b) => a - b); // Next, we iterate through the array with the outer loop for (let i = 0; i < arr.length - 2; i++) { // We start the inner loop from i + 1 to avoid using the same number twice let left = i + 1; let right = arr.length - 1; // The inner loop moves the left and right pointers towards each other while (left < right) { // If the sum of the current triplet is equal to the given sum, we have found our solution if (arr[i] + arr[left] + arr[right] === sum) { return [arr[i], arr[left], arr[right]]; } // If the sum of the current triplet is less than the given sum, we need to increase the sum // So, we move the left pointer to the right else if (arr[i] + arr[left] + arr[right] < sum) { left++; } // If the sum of the current triplet is greater than the given sum, we need to decrease the sum // So, we move the right pointer to the left else { right--; } } } // If no triplet is found, we return null return null; } // Example usage let arr = [1, 4, 45, 6, 10, 8]; let sum = 22; let triplet = findTriplet(arr, sum); console.log(triplet);
解释
函数 `findTriplet` 以数组 `arr` 和一个总和作为参数。
首先,使用 `sort` 方法将数组按升序排序。
接下来,我们使用 `for` 循环遍历数组,变量 `i` 从 0 到 `arr.length - 2`。
在外循环内,我们从 `i + 1` 开始内循环,以避免两次使用相同的数字。两个指针 `left` 和 `right` 分别初始化为 `i + 1` 和 `arr.length - 1`。
在内循环中,我们使用 `while` 循环不断地将 `left` 和 `right` 指针相互移动,直到 `left` 小于 `right`。
在 `while` 循环内,我们检查三个数 `arr[i] + arr[left] + arr[right]` 的当前总和。
如果它等于给定的 `sum`,我们找到了解决方案,并返回三个数 `[arr[i], arr[left], arr[right]]`。
如果它小于给定的 `sum`,我们需要增加总和,因此我们将 `left` 指针向右移动(递增 `left`)。
如果它大于给定的 `sum`,我们需要减少总和。