【问题标题】:Finding largest gap between consecutive numbers in array Java查找数组Java中连续数字之间的最大差距
【发布时间】:2020-09-21 11:20:26
【问题描述】:

我目前正在做一个家庭作业,该作业的最后一项任务是编写一个方法来查找未排序数组中连续数字之间的最大间隙。示例:如果数组的值为 {1,2,3,4,5,20},则间隙将为 15。目前该数组包含 20 个随机生成的值。

我完全不知道我将如何做到这一点。最初,我如何解决这个问题的想法是使用一个 for 循环,该循环遍历数组的每个值,内部还有另一个循环,以检查当前值是否等于前一个值加 1。如果是,则将该数字存储为范围内的最小值。我遇到的另一个问题是我不知道如何在不覆盖范围内的两个数字的情况下存储第二个数字。基本上,我尝试过的所有方法都不起作用,并且可以真正使用一些帮助或至少朝正确的方向轻推。

该方法现在所做的只是在找到数组中不连续的数字后才存储“a”的值。

这是我目前的代码

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    Main m = new Main();
    m.runCode();
  }

  public void runCode()
  {
    Calculator calc = new Calculator();

    calc.makeList(20);

    System.out.println("List:");
    calc.showList();

    System.out.println("Max is: " + calc.max());
    System.out.println("Min is: " + calc.min());
    System.out.println("Sum is: " + calc.sum());
  System.out.println("Ave is: " + calc.average());
  System.out.println("There are " + calc.fiftyLess() + " values in the list that are less than 50");
  System.out.println("Even numbers: " + calc.Even());
  }
}

class Calculator {

  int list[] = new int[20];

  public void makeList(int listSize)
  {
    for (int count = 0; count < list.length; count++) {
      list[count] = (int) (Math.random() * 100);
    }
  }

  public void showList()
  {
    for (int count = 0; count < list.length; count++) 
    {
      System.out.print(list[count] + " ");
    }
  }

public int max()
{
  int max = list[0];
  for (int count=0; count<list.length; count++){
     if (list[count] > max) {
        max = list[count];
     }
  }
  return max;
}

public int min()
{
  int min = list[0];
  for (int count=0; count<list.length; count++){
     if (list[count] < min) {
       min = list[count];
     }
  }
  return min;
 }

 public int sum()
 {
   int sum = 0;
   for (int count=0; count<list.length; count++){
     sum = sum + list[count];
   }
   return sum;
 }

 public double average()
 {
   int sum = sum();
   double average = sum / list.length;
   return average;
 }

 public int fiftyLess()
 {
   int lessThan = 0;
   for (int count =0; count<list.length;count++)
   {
     if (list[count] < 50)
     {
       lessThan++;
     }

   }

   return lessThan;

    

 }

 public int Even()
 {
   int isEven = 0;

   for (int count = 0; count<list.length;count++)
   {
     if (list[count] % 2 == 0)
     {
       isEven++;

     }
   }

   return isEven;
 }

 public int Gap()
 {

  int a = 0;
  int b = 0;
  int gap = math.abs(a - b);
   for (int count = 1; count<list.length;count++)
   {
     if (list[count] != list[count] + 1)
     {
      a =list[count];


     }
   }
 }
}

【问题讨论】:

  • 提示:第i个间隙可以用list[i+1] - list[i]找到;记住最大的差距。

标签: java arrays methods


【解决方案1】:

通过使用java8 stream 库,您可以用更少的代码行来实现这一点。

此代码段迭代数组的范围,并减去所有连续数字,并返回它们之间的最大差值或-1,以防数组为空。

import java.util.stream.IntStream;

class Main {
    public static void main(String[] args) {
        int[] list = {1, 2, 3, 4, 5, 20};
        int max_difference =
                IntStream.range(0, list.length - 1)
                        .map(i -> Math.abs(list[i + 1] - list[i]))
                        .max().orElse(-1);
        System.out.println(max_difference);
    }
}

或者,您可以使用传统的 for 循环来做到这一点。

class Main {
    public static void main(String[] args) {
        int[] list = {1, 2, 3, 4, 5, 20};
        int max_difference = -1;
        int difference;

        for (int i = 0; i < list.length - 1; i++) {
            difference = Math.abs(list[i + 1] - list[i]);
            if(difference > max_difference)
                max_difference = difference;
        }
        System.out.println(max_difference);
    }
}

两个代码段的输出:

15

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2015-12-13
    • 2014-02-15
    相关资源
    最近更新 更多