两个未分类阵列之间的最小差异
min difference between two unsorted arrays
我必须找到未分类数组的两个元素之间的最小绝对差。我的方法是首先排序数组,在一个数组上运行一个循环,然后在另一个数组中找到此数组的每个元素的下限。
,然后检查它是否最少并存储以进行进一步比较
测试案例:
2
8 1 3 5 7 9 7 3 1
8 2 4 6 8 10 8 6 2
8 2 3 5 10 9 3 2 1
7 1 2 6 12 13 3 2
输出:
1
0
结果:传递
说明:
1)最小将是ABS(A [7] -b [7])
2)最低将为abs(a [0] -b [(1)])
但是当我提交SPOJ时,我得到了错误的答案,看起来我缺少了其他东西。
问题https://www.spoj.com/problems/acpc11b/
请在我做错的地方提供帮助?
我的代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector <int> a;
vector <int> b;
int main(){
int t;
cin>>t;
while(t--){
int na;
cin>>na;
for(int i=0;i<na;i++){
int temp;
cin>>temp;
a.push_back(temp);
}
int nb;
cin>>nb;
for(int i=0;i<nb;i++){
int temp;
cin>>temp;
b.push_back(temp);
}
sort(a.begin(),a.end());
sort(b.begin(),b.end());
int ans=a[0]-b[0];
for(int i=0;i<a.size();i++){
int bval = lower_bound(b.begin(),b.end(),a[i])-b.begin();
ans = min(ans,abs(a[i]-b[bval]));
if(bval>0)
ans = min(ans,abs(a[i]-b[bval-1]));
}
cout<<ans<<endl;
a.clear();
b.clear();
}
}
您的版本有几个问题:
-
a[0]-b[0]
可能是负面的,剩余的计算无效。 - Lower_bound可能导致
b.end()
导致限制访问。
您可以执行以下操作:
std::size_t min_distance(std::vector<int> v1, std::vector<int> v2)
{
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
auto it1 = v1.begin();
auto it2 = v2.begin();
auto min = std::abs(*it1 - *it2);
while (min != 0 && it1 != v1.end() && it2 != v2.end()) {
min = std::min(min, std::abs(*it1 - *it2));
if (*it1 < *it2) {
++it1;
} else /*if (*it2 <= *it1)*/ {
++it2;
}
}
return min;
}
demo
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- OpenMP阵列性能较差
- 最接近的字符串:在字符串阵列中找到2个字符串之间的最小距离
- 两个未分类阵列之间的最小差异
- 通过插座在C 和Python之间进行固定的浮点阵列
- 阵列C 中两个点函数之间的距离
- Qthread char阵列在两个线程之间传递后被摧毁
- 线性阵列和多维之间有什么区别
- 为什么我会看到在堆和堆栈上分配的阵列之间的不同行为
- 指针阵列和指针数组的指针之间的区别
- char阵列[]和char *数组之间有什么区别
- 相同大小的2D和1D阵列之间的内存或执行问题
- 在结构阵列(AoS)和阵列结构(SoA)之间来回切换
- 在Java Android和JNI之间发送/接收音频阵列
- 阵列和阵列堆栈之间的区别
- 多暗对象的多暗阵列和仅包含一个暗对象的一个较高暗的阵列之间的区别是什么
- 基于组件的游戏对象的阵列和地图之间的优点和缺点
- 创建一个3x3x3阵列.用0到9之间的随机值填充.输出数组.找出3个最小值和3个最大值的输出
- 使用多晶型载体与多晶型阵列之间的差异