求指定两个整数数组最小元素和

题目描述:

给定两个整数数组,arr1、arr2,数组元素按升序排列;
假设从arr1、arr2中分别取出一个元素,可构成一对元素;
现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值;
注意:两对元素对应arr1、arr2的下标是相同的,视为同一对元素。

输入描述

输入两行数组arr1、arr2
每行首个数字为数组大小size, 0 < size <= 100
arr1,arr2中的每个元素e, 0< e <1000
接下来一行,正整数k 0 < k <= arr1.size * arr2.size

输出描述

满足要求的最小值

示例一

  • 输入

    1 1 2
    1 2 3
    2COPY
  • 输出

    4COPY
  • 说明:
    用例中需要取两个元素,取第一个数组第0个元素与第二个数组第0个元素组成一个元素[1,1];
    取第一个数组第1个元素与第二个数组第0个元素组成一个元素[1,1];
    求和为1+1+1+1=4 ,满足要求最小

Java

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Author: 
 * Date: 2020/12/15
 * Time: 23:26
 * Description:
 */
public class Main0002 {
  public static void main(String[] args) {
    try (Scanner scanner = new Scanner(System.in)) {
      int[] arr1 = parseArray(scanner.nextLine());
      int[] arr2 = parseArray(scanner.nextLine());
      int k = scanner.nextInt();
      solution(arr1, arr2, k);
    }
  }

  private static void solution(int[] arr1, int[] arr2, int k) {
    int initialCapacity = arr1.length * arr1.length;
    List<Integer> sums = new ArrayList<>(initialCapacity);
    for (int x : arr1) {
      for (int y : arr2) {
        sums.add(x + y);
      }
    }
    sums.sort(Integer::compareTo);
    int res = 0;
    for (int i = 0; i < k; i++) {
      res += sums.get(i);
    }
    System.out.println(res);
  }

  private static int[] parseArray(String line) {
    String[] split = line.split(" ");
    int[] arr = new int[split.length];
    for (int i = 0; i < arr.length; i++) {
      arr[i] = Integer.parseInt(split[i]);
    }
    return arr;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值