【问题标题】:Largest element in two array两个数组中的最大元素
【发布时间】:2017-04-19 09:55:46
【问题描述】:

我正在尝试编写一个程序来查找两个数组中的最大元素。如果数组包含相似的元素,它将返回最高的相互元素。如果数组不包含相似的元素,则返回 -1。我已经完成了 90% 的程序。我设法返回了最高的数字,我只是不知道如何返回 -1,因为我们只能做一个返回语句!有什么帮助吗?

    public class finalLargestInCommon
     {
       public static void main(String [] args)
       {
         //array declaration
         int [] array1 = {3, 8, 5, 2, 7, 9};
         int [] array2 = {5, 1, 22, 7, 2, 15, 3};
         int [] array3 = {35, 12, 19, 35, 45};
         int [] array4 = {55, 99, 12};
         int [] array5 = {33, 11, 77, 44, 55};
         int [] array6 = {99, 88, 222, 66, 1000};

         System.out.println(LargestInCommon(array1, array2));
         System.out.println(LargestInCommon(array3, array4));
         System.out.println(LargestInCommon(array5, array6));



       }

         public static int LargestInCommon (int [] a, int [] b)
         {
          //variable declaration 
          int i = 0;
          int k = 0;
          int greatest = 0;
          int notPresent = -1;

          for(i = 0; i < a.length; i++)
           {
            for(k = 0; k < b.length; k++)
            {
              if(a[i] == b[k])
               greatest = a[i];

             }
           }

            return(greatest);


       }


   }

【问题讨论】:

  • 感谢@batty 的编辑
  • 代码不起作用。尝试将 array2 的第二个元素从 1 更改为 8 并检查。这将提示您需要改进的地方。而且,从技术上讲,您可以在一个方法中拥有两个或多个 return 语句。

标签: java arrays for-loop methods int


【解决方案1】:
private static int LargestInCommon(int[] a, int[] b) {
    Map<Integer,Integer> map = new HashMap<>();
    for(int i=0;i<a.length;i++) {
        map.put(a[i],0);
    }
    int greatest = -1;
    if(map.containsKey(b[0])) greatest = b[0];
    for(int i=1;i<b.length;i++) {
        if(map.containsKey(b[i])){
           if(greatest < b[i])
                greatest = b[i];
        }
    }
    return greatest;
}

将数组中的元素放入 map/Table 中,同时遍历第二个数组检查 map 是否有来自该数组的元素并相应地更新最大。上述方法执行此操作,如果没有相互元素,则返回 -1

【讨论】:

    【解决方案2】:

    您可以使用它,对两者进行排序,然后循环查找相似的元素:

    public static int maximumSimilar(int[] a, int[] b){
        Arrays.sort(a);
        Arrays.sort(b);
        for(int i = a.length-1; i>=0;i--){
            for(int j = b.length-1;j>=0;j--){
                if(b[j]==a[i]){
                    return b[j];
                }
            }
        }
        return -1;
    }
    

    【讨论】:

      【解决方案3】:

      greatest 初始化为-1 并按照您的操作返回greatest。 如果您的if 条件没有被命中(这意味着两个相似的数字不存在)greatest 将返回值 -1。

      public static int LargestInCommon (int [] a, int [] b)
               {
                //variable declaration 
                int i = 0;
                int k = 0;
                int greatest = -1;
      
                for(i = 0; i < a.length; i++)
                 {
                  for(k = 0; k < b.length; k++)
                  {
                    if(a[i] == b[k])
                     greatest = a[i];
      
                   }
                 }
      
                  return greatest;
      
      
             }
      

      【讨论】:

      • 请注意,这仍然不会产生正确的答案。它恰好适用于他正在使用的输入数组。
      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 2017-02-02
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多