给定两个数组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中的建议会有所帮助。
答案 0 :(得分:0)
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;
}
答案 1 :(得分:0)
您的代码不是一个解决方案,但是:
temp
应该已经被初始化为足够大的值,以便在想要的结果之下,i != j
时,您应该将sum
与temp
进行比较,以便在sum
位于temp
下时存储结果,return
错过了。因此,您更正的代码可能如下所示:
#include <limits.h>
int twinArrays(int ar1_size, int* ar1, int ar2_size, int* ar2)
{
int sum_min = INT_MAX;
/* for each element in ar1 */
for (int i = 0; i < ar1_size; i++)
{
/* for each element in ar2 */
for (int j = 0; j < ar2_size; t++)
{
/* go to next j if indices are the same */
if (i != j)
{
/* compute sum */
int sum = ar1[i] + ar2[j];
/* compare to best */
if (sum < sum_min)
{
/* remember the best */
sum_min = sum;
}
}
}
}
return sum_min;
}