查找和为给定值的三个数的 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`,我们需要减少总和。

更新于:2023年3月13日

浏览量:350

启动您的职业生涯

完成课程获得认证

开始学习
广告