给定两个数组ar1
和ar2
,我们如何从两个数组中找到两个元素的总和,使得索引不相同且它们的总和最小?
但是,我写了以下内容,但我不确定将总和存储在临时变量中并将总和与下一次传递中的总和进行比较:
int twinArrays(int ar1_size, int* ar1, int ar2_size, int* ar2)
{
int temp;
for(int i = 0; i < ar1_size;i++)
{
for(int j=0; j < ar2_size; j++) {
int sum=0;
if( i != j)
sum = ar1[i] + ar2[j];
}
}
return temp;
}
}
C中的建议会有所帮助。
来自2个数组的2个元素的最小和是其最小元素的总和。
但是,当任何数组的大小为0时会发生什么?在这方面,问题的提法是不明确的。
以下最坏情况时间复杂度为O(N),最坏情况空间复杂度为O(1):
#include <limits.h>
int twinArrays(int ar1_size, int* ar1, int ar2_size, int* ar2)
{
int min1 = INT_MAX, min2 = INT_MAX;
for(int i = 0; i < ar1_size; i++)
min1 = ar1[i] < min1? ar[1]: min1;
for(int i = 0; i < ar2_size; i++)
min2 = ar2[i] < min2? ar2[1]: min2;
if (min1 > 0 && min2 > INT_MAX - min1) {
/* handle overflow */
return INT_MAX;
} else if (min1 < 0 && min2 < INT_MIN - min1) {
/* handle underflow */
return INT_MIN;
}
return min1 + min2;
}
您的代码不是一个解决方案,但是:
temp
应该被初始化为足够大的价值,以达到想要的结果,i != j
,如果sum
在temp
下,你应该将sum
与temp
进行比较以存储结果,因此,您更正的代码可能如下所示:
return