java - 双数组从每个数组索引中查找最小值必须不同

标签 java arrays int logic

给定两个数组 A 和 B,每个数组包含 n 个整数。您需要从 A 中精确选择一个数字,从 B 中精确选择一个数字,使得所选的两个数字的索引不相同,并且所选的 2 个值的总和最小。

您的目标是找到并打印这个最小值。

例如,下图中所示的是最小总和。 enter image description here

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    static int twinArrays(int[] ar1, int[] ar2){
        // Complete this function
        int minAr1 = ar1[0];
        int minAr2;
        int index = 0;
        for(int i =0; i<ar1.length;i++) {
            if(ar1[i]<minAr1) {
                minAr1 = ar1[i];
                index = i;
            }
        }
        if(index == 0) {
            minAr2 = ar2[1];
        }else {
            minAr2 =ar2[0];
        }

        for(int j=0;j<ar2.length;j++) {
            if(j!=index && minAr2>ar2[j]) {
                minAr2 =ar2[j];
            }
        }
        return minAr1+minAr2;
     }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        if(n>=2 && n<=1000000) {
        int[] ar1 = new int[n];
        for(int ar1_i = 0; ar1_i < n; ar1_i++){
            int temp1 = in.nextInt();
            if(temp1>=1&&temp1<=1000000) {
                ar1[ar1_i] = temp1;
            }
        }
        int[] ar2 = new int[n];
        for(int ar2_i = 0; ar2_i < n; ar2_i++){
            int temp2 = in.nextInt();
            if(temp2>=1&&temp2<=1000000) {
                ar2[ar2_i] = temp2;
            }
        }
        int result = twinArrays(ar1, ar2);
        System.out.println(result);
        }

    }
}

我已经实现了,工作正常,但仍然缺少一些东西,所以一些测试用例失败,如果您发现此代码中的任何缺陷,任何人都可以给我一些线索和提示来优化我的代码

最佳答案

您的代码的工作原理是从第一个数组中查找最小值,然后从第二个数组中查找与第一个数组中的最小值不在同一位置的最小值。这种方法的问题在于它不能保证找到总体最小总和。例如,考虑这些小数组:

 [0, 1], [0, 100]

在这里,如果取第一个数组的最小值 (0) 和不在同一位置的第二个数组的最小值 (100),则得到的总和为 100。但是,正确的总和为pick 是第二个数组中的最小值 (0) 和第一个数组中的第二小值 (1),总共 1。

这里有用的一个观察是最小和对必须是以下之一:

  • 每个数组中最小值的总和。
  • 一个数组中的最小值与另一个数组中的第二小值之和。

您的解决方案在这里是正确的,只是您不考虑从第二个数组中取出最小的值以及从第一个数组中取出第二小的值。尝试编辑您的代码以解决这种情况。

关于java - 双数组从每个数组索引中查找最小值必须不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44503854/

相关文章:

java - 如果我激活 `-parameters` 编译器参数,SDN 将不起作用

java - MySQL 与 JSP 的连接错误

arrays - Bash 连接数组条目,中间没有空格

java - 无法从 Firebase 检索数据到 ListView

javascript - 在Javascript中查找二维数组中所有连续1的矩形的坐标

c++ - 使用指针运算将两个数组的内容相加并保存到一个空数组

c# - 在 C# 公共(public)方法中,除了整数类型之外, `int` 表示什么?

c++ - 无符号整数 C++ 可移植性

windows - 64 位系统的整数大小差异(与我的旧 32 位 pc 系统混淆)

java - 一段时间后,Coldfusion 停止使用 smtp.gmail.com 发送电子邮件