当前位置: 首页 > 编程笔记 >

在C ++中从给定的三个排序数组中查找三个最接近的元素

赫连捷
2023-03-14
本文向大家介绍在C ++中从给定的三个排序数组中查找三个最接近的元素,包括了在C ++中从给定的三个排序数组中查找三个最接近的元素的使用技巧和注意事项,需要的朋友参考一下

假设我们有三个排序的数组A,B和C,以及分别来自A,B和C的三个元素i,j和k,使得max(| A [i] – B [i] |,| B [j] – C [k] |,| C [k] – A [i] |)被最小化。因此,如果A = [1、4、10],B = [2、15、20]和C = [10、12],则输出元素为10、15、10,这三个分别来自A,B和C。

假设A,B和C的大小分别为p,q和r。现在按照以下步骤解决这个问题-

    list-paddingleft-2">
  • i:= 0,j:= 0和k:= 0

  • 现在在i <p和j <q和k <r时执行以下操作。

    • 找出A [i],B [j]和C [k]的最小值和最大值

    • 计算差异:= max(X,Y,Z)-min(A [i],B [j],C [k])

    • 如果结果小于当前结果,则将其更改为新结果

    • 递增包含最小值的数组的指针。

示例

#include <iostream>
using namespace std;
void getClosestElements(int A[], int B[], int C[], int p, int q, int r) {
   int diff = INT_MAX;
   int i_final =0, j_final = 0, k_final = 0;
   int i=0,j=0,k=0;
   while (i < p && j < q && k < r) {
      int min_element = min(A[i], min(B[j], C[k]));
      int max_element = max(A[i], max(B[j], C[k]));
      if (max_element-min_element < diff){
         i_final = i, j_final = j, k_final = k;
         diff = max_element - min_element;
      }
      if (diff == 0)
         break;
      if (A[i] == min_element)
         i++;
      else if (B[j] == min_element)
         j++;
      else
         k++;
   }
   cout << A[i_final] << " " << B[j_final] << " " << C[k_final];
}
int main() {
   int A[] = {1, 4, 10};
   int B[] = {2, 15, 20};
   int C[] = {10, 12};
   int p = sizeof A / sizeof A[0];
   int q = sizeof B / sizeof B[0];
   int r = sizeof C / sizeof C[0];
   cout << "Closest elements are: ";
   getClosestElements(A, B, C, p, q, r);
}

输出结果

Closest elements are: 10 15 10
 类似资料:
  • 给定一个未排序的数组,我试图找到最接近数组中位数的 K 个元素。我在线性运行时间内找不到解决方案。 这里的中位数是6。 答案是2,3,4,5,6。 任何帮助或提示将不胜感激。

  • 本文向大家介绍从三个链表中查找一个三元组,其总和等于C ++中的给定数字,包括了从三个链表中查找一个三元组,其总和等于C ++中的给定数字的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,该程序在链表中查找三元组,其总和等于给定的数字。 让我们看看解决问题的步骤。 为链表创建一个struct节点。 用伪数据创建链接列表。 为三个元素编写三个内部循环,这些循环将迭代直到链接列

  • 本文向大家介绍Java程序从两个排序的数组中查找最接近的一对,包括了Java程序从两个排序的数组中查找最接近的一对的使用技巧和注意事项,需要的朋友参考一下 为了从两个排序的数组中找到最接近的一对,Java代码如下: 示例 输出结果 一个名为Demo的类包含一个名为closest_pair的函数,该函数遍历两个数组并检查哪个和与前面指定的数字非常接近。数组中的这对将作为输出返回。在main函数中,定

  • 本文向大家介绍C#程序查找三个数字中的最大值,包括了C#程序查找三个数字中的最大值的使用技巧和注意事项,需要的朋友参考一下 首先,让我们设置三个数字- 现在检查第一个数字和第二个数字。如果num1> num2,则用num3检查num1。如果num1大于num3,则表示最大数量为num1。 示例 您可以尝试运行以下代码来查找三个数字的最大值。 输出结果

  • 问题内容: 给定两个排序的整数数组和,以及一个整数,我必须找到这样的数组: 并尽可能大。 我能想到的最佳解决方案是 O ( n log n )时间,从第一个数组中取出每个整数,然后找到“ ” 的下限。 有人可以建议我做一个更好的方法(也许是在O( n )时间)吗? 问题答案: 想一想,然后您可能会问自己: “是否有必要每次都在排序的b数组中搜索a []的连续值?”

  • 本文向大家介绍程序在C ++中查找三个数字的公比,包括了程序在C ++中查找三个数字的公比的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序来查找三个数字的公比。 为此,我们将获得a:b和b:c。我们的任务是找到这三个数字a:b:c的公比并打印出来。 示例 输出结果