整数对最小和
问题描述
给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值。
注意:两对元素如果对应于array1、array2中两个下标均相同,则视为同一对元素。
输入描述
输入两行数组array1、array2,每行首个数字为数组大小size(0<size<=100)
0<array1[i]<=1000
0<array2[i]<=1000
接下来一行为正整数k
0<k<=array1.size()*array2.size()
输出描述
满足要求的最小和
示例1
输入
3 1 1 2
3 1 2 3
2
输出
4
解体思路
感觉没怎么说清楚,按照示例与自己对本题的理解,代码如下:
int Minsumofarrays(int[] arrays1, int[] arrays2, int k)
{
int length_array1 = array1.Length;
int length_array2 = array2.Length;
int ret = 0;
int[] array_sum = new int[length_array1 * length_array2];
for(int i = 0; i < length_array1; i++)
{
for(int j = 0; j < length_array2; j++)
{
array_sum[i * length_array1 + j] = array1[i]+array2[j];
}
}
quicksort(array_sum, 0, array_sum.Length);
for(int i = 0; i < k; i++)
{
ret += array_sum[i];
}
return ret;
}
void quicksort(int[] arr, int begin, int end)
{
int i = begin;
int j = end;
int index = begin;
while(i < j)
{
while(arr[index] >= arr[i] && i < j)
i++;
while(arr[index] <= arr[j] && i < j)
j--;
if(i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[index];
arr[index] = arr[j];
arr[j] = arr[index];
if(i > begin)
quicksort(arr, begin, i - 1);
if(j < end)
quicksort(arr, j + 1, end);
}