最小化三个不同已排序数组中 (max(A[i], B[j], C[k]) – min(A[i], B[j], C[k])) 的C++实现
概念
对于给定的三个已排序数组 A、B 和 C(大小不一定相同),计算任何三元组 A[i]、B[j]、C[k](分别属于数组 A、B 和 C)的最大值和最小值之间的最小绝对差,即最小化 (max(A[i], B[j], C[k]) – min(A[i], B[j], C[k]))。
输入−
A : [ 2, 5, 6, 9, 11 ] B : [ 7, 10, 16 ] C : [ 3, 4, 7, 7 ]
输出−
1
解释
当我们选择 A[i] = 6,B[j] = 7,C[k] = 7 时,我们得到最小差值为 max(A[i], B[j], C[k]) - min(A[i], B[j], C[k])) = |7-6| = 1
输入−
A = [ 6, 9, 11, 16 ] B = [ 7, 10, 16, 79, 90 ] C = [ 3, 4, 7, 7, 9, 9, 11 ]
输出−
1
解释−
当我们选择 A[i] = 11,B[j] = 10,C[k] = 11 时,我们得到最小差值为 max(A[i], B[j], C[k]) - min(A[i], B[j], C[k])) = |11-10| = 1
方法
从数组 A、B 和 C 中最大的元素开始。跟踪一个变量,以便在执行每个步骤时更新答案。
在每一步中,减小差值的唯一方法是减小三个元素中的最大元素。
因此,访问包含此步骤中最大元素的数组中的下一个最大元素,并更新答案变量。
我们必须重复此步骤,直到包含最大元素的数组结束。
示例(C++)
// 以上方法的 C++ 代码
#include<bits/stdc++.h>
usingnamespacestd;
intsolve(intA1[], intB1[], intC1[], inti1, intj1, intk1) {
intmin_diff, current_diff, max_term;
// calculating min difference from last
// index of lists
min_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
- min(A1[i1], min(B1[j1], C1[k1])));
while(i1 != -1 && j1 != -1 && k1 != -1) {
current_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
- min(A1[i1], min(B1[j1], C1[k1])));
// checking condition
if(current_diff < min_diff)
min_diff = current_diff;
// calculating max term from list
max_term = max(A1[i1], max(B1[j1], C1[k1]));
if(A1[i1] == max_term)
i1 -= 1;
elseif(B1[j1] == max_term)
j1 -= 1;
else
k1 -= 1;
}
returnmin_diff;
}
intmain() {
intD1[] = { 5, 8, 10, 15 };
intE1[] = { 6, 9, 15, 78, 89 };
intF1[] = { 2, 3, 6, 6, 8, 8, 10 };
intnD = sizeof(D1) / sizeof(D1[0]);
intnE = sizeof(E1) / sizeof(E1[0]);
intnF = sizeof(F1) / sizeof(F1[0]);
cout << solve(D1, E1, F1, nD-1, nE-1, nF-1);
return0;
}输出
1
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP