当前位置: 首页 > 知识库问答 >
问题:

比较2队实力,找出获胜概率

施梓
2023-03-14
TeamA = {3,6,7,5,3,5,6,2,9,1} 
TeamB = {2,7,0,9,3,6,0,6,2,6}

打印TeamA以最佳方式进行战斗时可以赢得的最大战斗次数。假设数组中的每个数字都是一个成员,该成员与其他团队的另一个成员进行战斗。例如,TeamA[i]将与TeamB[i]作战,如果大于TeamB,则TeamA[i]获胜。在给定的阵列顺序下,TeamA只能赢得4场一对一的战斗。如果我们重新安排TeamA阵型,有可能赢得7场比赛。i、 TeamA==

下面是正确确定输出的代码,但由于排序而在时间上存在复杂性,请帮我优化下面的代码

import java.io.*;
import java.util.*;
public class FightCode{

    // static long[] result ={};
    public static void main(String args[] ) throws Exception {
        Scanner scanner = new Scanner(System.in); 
        try {
            int testCount = scanner.nextInt();

            for (int test=0;test<testCount;test++) {
                int totalMem = scanner.nextInt();     
                Long[] teamA = new Long[totalMem];      
                Long[] teamB = new Long[totalMem]; 
                if (totalMem <1)
                    return;  
                for (int r = 0; r < totalMem; r++) {       
                    teamA[r] = (Long)scanner.nextLong();    
                } 
                for (int i = 0; i < totalMem; i++) {       
                    teamB[i] = (Long)scanner.nextLong();    
                } 
                int count = 0;    

                // int[]swapar = new int[totalMem];  

                Arrays.sort(teamB, Collections.reverseOrder());  
                Arrays.sort(teamA, Collections.reverseOrder()); 
                boolean result = Arrays.equals(teamA, teamB);
                if (result)
                    return;  
                //  System.out.println(Arrays.toString(teamB));
                // System.out.println(Arrays.toString(teamA));   
                for (int a = 0; a < totalMem; a++) {     
                    for (int k=0;k<totalMem;k++) {
                        if(teamA[k] > teamB[a]){
                            // swapar[a] = teamA[k];
                            teamA[k] = 0L;
                            count++;
                            break;
                        } 
                    }  
                } 

                //  System.out.println(Arrays.toString(swapar));
                System.out.println(count);
            }
        } catch(Exception e) {
            System.err.println(e.getStackTrace().toString());
        } finally {
            scanner.close();
        }
    }
}

共有1个答案

国高杰
2023-03-14

这个问题是在techgig Code Gladiator 2020上提出的。您可以在x和k-1之间循环,而不是在0到k-1的范围内循环整个B队,其中x是B队中找到最后一个匹配的最后一个索引。

                for (int a = 0; a < totalMem; a++) {     
                for (int k=minIndex;k<a-1;k++) {
                    if(teamA[a] > teamB[k]){
                        // swapar[a] = teamA[k];
                        minIndex=k+1;
                        count++;
                        break;
                    } 
                }  
            } 
 类似资料:
  • 介绍 各种比较器(Comparator)实现和封装 提供的比较器 版本比较器 // 1.2.1 < 1.12.1 VersionComparator.INSTANCE.compare("1.2.1", "1.12.1"); // 1.12.1 < 1.12.1c VersionComparator.INSTANCE.compare("1.12.1", "1.12.1c"); // V0.0.2

  • 正如标题所说,我有一个问题。我有两个数组。一个长度是五个。另一个长七个。 即使两个数组中的对象不同,如果数组中的所有对象具有相同的id,则将判断为具有相同的对象。 关于javascript有很多答案,但似乎关于java的答案并不多。任何遇到相同问题的人都可以分享解决方案。如果您对我的问题有任何类似的问题,请分享。非常感谢。 以下是我的尝试和样本数据。 列表的5个对象是这个。 如果manName不同

  • 所以在试图完成我的h. w,有一件事对我来说还不顺利。在这个程序中,我使用了2个类,这是一个跑步的压缩,我只是想宣布一个赢得比赛的玩家的位置。 例如:我们有4个线程。如果第二个线程最后达到100米,我想发布消息说他排在第四位。 参赛者类别: 轨道等级: 在我们的第一课中,当我们使用线程时,它是一个愚蠢的程序。

  • 问题内容: 我想知道如何比较两个布尔数组并列出不匹配的布尔值。 我写了一个2数组的简单示例。 我如何比较array1和array2并显示不匹配的内容。我正在尝试执行此操作以检查问答游戏的用户结果。 谢谢! 问题答案: 这里的 一个 实现,但无论是一个你追求的是完全不可能说,因为你没有指定你认为答案 应该 是: 如果答案与正确答案相匹配,则将为您提供布尔值列表。 但是,假设您想要的是正确答案的 索引

  • 问题内容: 是否有任何方法可以接收2个JSON对象并将其进行比较以查看是否有任何数据已更改? 编辑 在审查评论之后,需要进行一些澄清。 JSON对象定义为 “一组无序的名称/值对。一个对象以{(左括号)开始,以}(右括号)结束。每个名称后面都带有:(冒号),名称/值对之间以,(逗号)分隔。 ”。- json.org 我的目标是能够简单地比较2个JSON对象文字。 我不是javascript专家,所

  • 问题内容: 比较2张图像以查看它们是否都是相同的文件很容易,将文件MD5扔掉了,但是通过使用PHP GD来获取2张图像的差异,是否有可能确定2张图像是否相同。如果我们在哪里得到两者的差异,并且都是白色的(id假设是白色甚至是黑色),那么我们现在知道它们都是同一张照片吗? 另外请注意:id喜欢知道是否有可能获得2张相同大小的图像来创建洋葱皮效果,其中1张透明度为50%,另一张透明度为50%。 问题答