Java程序查找数组中差值最大的两个元素


在这个问题中,我们将使用Java查找数组中差值最大的两个元素。

我们可以为每个元素创建一个组合,并找出每对元素之间的差值。之后,我们可以选择差值最大的那对元素。另一种方法是排序数组,然后取数组中最大和最小的元素。

问题陈述

我们得到一个包含整数值的数组。我们需要找到两个数组元素,以使它们之间的差值最大化。

输入1

array[] = { 50, 10, 30, 400, 600, 200, 70, 90, 80, 322 }

输出1

The maximum difference between 600 and 10 is 590.

输入2

array[] = {1000, 30, 5000, 476, 987, 312 }

输出2

The maximum difference is between 30 and 5000.

输入3

array[] = {-70, -150, 40, 500, -90 }

输出3

The smallest element in the array is -150, and the largest element is 500.

不同的方法

以下是查找数组中两个元素的不同方法

使用蛮力法

在这种方法中,我们将创建包含两个数组元素的组合。之后,我们将计算这两个元素的差值,并在需要时更新最大差值。

  • ‘curr_diff’初始化为0,以存储两个元素之间的差值,并将‘max_diff’初始化为第一个和第二个元素的差值。此外,初始化‘first’和‘second’变量以存储差值最大的元素对。

  • 从第0个索引开始遍历数组。此外,使用嵌套循环p + 1索引遍历数组。

  • 计算位于pthqth索引处的数组元素的绝对差值,并将它们存储到curr_diff中。

  • 如果curr_diff大于max_diff,则更新max_diff、first和second变量的值。

  • 打印最大差值、first和second变量的值。

示例

import java.io.*;
public class Main {
   public static void getMaxDiff(int array[], int arr_len) {
      // Variable initialization
      int curr_diff, max_diff = array[1] - array[0];
      int first = array[1], second = array[0];

      // Traverse the array and find the difference between each 2 elements
      for (int p = 0; p < arr_len; p++) {
         for (int q = p + 1; q < arr_len; q++) {
            curr_diff = Math.abs(array[p] - array[q]);
            // If the difference between two elements is greater than max_diff, update max_diff.
            if (curr_diff > max_diff) {
               max_diff = curr_diff;
               first = array[p];
               second = array[q];
            }
         }
      }
      System.out.println("Maximum difference is " + max_diff + " between " + first + " and " + second);
   }
   public static void main(String[] args) {
      int array[] = { 50, 10, 30, 400, 600, 200, 70, 90, 80, 322 };
      int arr_len = array.length;
      getMaxDiff(array, arr_len);
   }
}

输出

Maximum difference is 590 between 10 and 600

时间复杂度:O(N^2),用于创建每个元素的组合。

空间复杂度:O(1),因为我们不使用任何动态空间。

使用排序

在这种方法中,我们将对数组进行排序。之后,我们可以取排序后数组的第一个和最后一个元素,以获得任意两个数组元素之间的最大差值。

  • 首先导入java.iojava.util包的必要类。
  • 使用Arrays.sort()方法对数组进行排序。
  • 计算nums[arr_len - 1]和nums[0]之间的差值。
  • 在输出中打印差值、nums[arr_len - 1]和nums[0]。

示例

import java.io.*;
import java.util.*;
public class Main {
   public static void main(String[] args) {
      int nums[] = { 50, 10, 30, 400, 600, 200, 70, 90, 80, 322 };
      int arr_len = nums.length;
      
      // sort array
      Arrays.sort(nums);
      
      // Get the max difference
      int max_diff = nums[arr_len - 1] - nums[0];
      
      // print max difference
      System.out.println("Maximum difference is " + max_diff + " between " +nums[0] + " and " + nums[arr_len - 1] );
   }
}

输出

Maximum difference is 590 between 10 and 600

时间复杂度:O(NlogN),用于对数组进行排序。

空间复杂度:O(N),用于对数组进行排序。

使用优化方法

在这种方法中,我们将遍历数组以查找给定数组中的最大和最小元素。之后,我们可以计算最小和最大元素的差值,这将是最大差值。

  • maximini初始化为第一个数组元素,以存储最大和最小元素。

  • 开始迭代数组。

  • 如果当前数组元素超过maxi,则更新maxi。如果当前元素小于mini,则更新mini。

  • 计算maxi和mini之间的差值。

  • 打印maxi和mini之间的差值,以显示在输出中。

示例

import java.io.*;
public class Main {
   public static void getMaxDiff(int array[], int arr_len) {
      int maxi = array[0];
      int mini = array[0];
      // Finding the maximum and minimum element in the array
      for (int p = 0; p < arr_len; p++) {
         if (array[p] > maxi) {
            maxi = array[p];
         }
         if (array[p] < mini) {
            mini = array[p];
         }
      }
      // Getting the maximum difference
      int max_diff = maxi - mini;
      System.out.println("Maximum difference is " + max_diff + " between " + mini + " and " + maxi);
   }
   public static void main(String[] args) {
      int array[] = { -70, -150, 40, 500, -90 };
      int arr_len = array.length;
      getMaxDiff(array, arr_len);
   }
}

输出

Maximum difference is 650 between -150 and 500

时间复杂度:O(N),用于遍历数组。

空间复杂度:O(1),因为我们不使用额外的空间。

我们已经看到了三种查找差值最大的两个元素的方法。只有当我们计算最小和最大数组元素的差值时,才能获得两个数组元素之间的最大差值。就时间和空间复杂度而言,第三种方法提供了最优化的解决方案。

更新于:2024年8月30日

415 次查看

启动您的职业生涯

完成课程获得认证

开始
广告