Javascript 程序查找给定差的一对

原文:https://www . geesforgeks . org/JavaScript-program-to-find-a-pair-with-then-difference/

给定一个未排序的数组和一个数字 n,找出数组中是否有一对元素的差为 n。 示例:

Input: arr[] = {5, 20, 3, 2, 50, 80}, n = 78
Output: Pair Found: (2, 80)

Input: arr[] = {90, 70, 20, 80, 50}, n = 45
Output: No Such Pair

最简单的方法是运行两个循环,外部循环挑选第一个元素(较小的元素),内部循环寻找由外部循环加上 n 挑选的元素。这个方法的时间复杂度是 O(n^2). 我们可以使用排序和二分搜索法来提高时间复杂度到 O(nLogn)。第一步是按升序对数组进行排序。一旦数组被排序,从左到右遍历数组,对于每个元素 arr[i],arr[I+1]中 arr[i] + n 的二分搜索法..n-1]。如果找到该元素,则返回该对。 第一步和第二步都采用 0(nLogn)。所以整体复杂度是 O(nLogn)。 上述算法的第二步可以改进为 O(n)。第一步保持不变。第二步的想法是取两个索引变量 I 和 j,分别初始化为 0 和 1。现在运行一个线性循环。如果 arr[j]–arr[i]小于 n,我们需要寻找更大的 arr[j],所以增量为 j .如果 arr[j]–arr[I]大于 n,我们需要寻找更大的 arr[I],所以增量为 I .感谢 Aashish Barnwal 提出这种方法。 下面的代码只是针对算法的第二步,它假设数组已经排序了。

java 描述语言

<script>

       // JavaScript program for the above approach

       // The function assumes that the array is sorted 
       function findPair(arr, size, n) {
           // Initialize positions of two elements 
           let i = 0;
           let j = 1;

           // Search for a pair 
           while (i < size && j < size) {
               if (i != j && arr[j] - arr[i] == n) {
                   document.write("Pair Found: (" + arr[i] + ", " +
                   arr[j] + ")");
                   return true;
               }
               else if (arr[j] - arr[i] < n)
                   j++;
               else
                   i++;
           }

           document.write("No such pair");
           return false;
       }

       // Driver program to test above function 

       let arr = [1, 8, 30, 40, 100];
       let size = arr.length;
       let n = 60;
       findPair(arr, size, n);

   // This code is contributed by Potta Lokesh

   </script>

输出:

Pair Found: (40, 100)

哈希也可以用来解决这个问题。创建一个空哈希表 HT。遍历数组,使用数组元素作为哈希键,并在 HT 中输入它们。再次遍历数组,在 HT 中寻找值 n + arr[i]。

更多详情请参考整篇文章找到一对给定差异的