Advertisement
Guest User

PSDS Max Distance

a guest
Apr 1st, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.86 KB | None | 0 0
  1. import java.util.Random;
  2.  
  3. public class Solution {
  4.  
  5.     public static int maxDistance(int[] arr) {
  6.         int[] minIdxs = new int[arr.length];
  7.         minIdxs[0] = 0;
  8.         for (int i = 1; i < arr.length; ++i) {
  9.             minIdxs[i] = arr[i] < arr[minIdxs[i - 1]] ? i : minIdxs[i - 1];
  10.         }
  11.         int[] maxIdxs = new int[arr.length];
  12.         maxIdxs[arr.length - 1] = arr.length - 1;
  13.         for (int i = arr.length - 2; i >= 0; --i) {
  14.             maxIdxs[i] = arr[i] > arr[maxIdxs[i + 1]] ? i : maxIdxs[i + 1];
  15.         }
  16.         int result = -1;
  17.         for (int i = arr.length - 1, j = arr.length - 1; i >= 0 && j >= 0;) {
  18.             if (minIdxs[i] != maxIdxs[j] && arr[minIdxs[i]] <= arr[maxIdxs[j]]) {
  19.                 result = Math.max(result, j - i);
  20.                 --i;
  21.             } else {
  22.                 --j;
  23.             }
  24.         }
  25.         return result;
  26.     }
  27.  
  28.     public static void main(String[] args) {
  29.         System.out.println(maxDistance(new int[]{6, 1, 5, 7, 4, 2}));
  30.         System.out.println(maxDistance(new int[]{6, 1, 5, 7, 4, 3}));
  31.         System.out.println(maxDistance(new int[]{6, 3, 5, 7, 4, 2}));
  32.         System.out.println(maxDistance(new int[]{3, 5, 4, 2}));
  33.         System.out.println(maxDistance(new int[]{34, 8, 10, 3, 2, 80, 30, 33, 1}));
  34.         System.out.println(maxDistance(new int[]{9, 2, 3, 4, 5, 6, 7, 8, 18, 0}));
  35.         System.out.println(maxDistance(new int[]{1, 2, 3, 4, 5, 6}));
  36.         System.out.println(maxDistance(new int[]{6, 5, 4, 3, 2, 1}));
  37.         Random random = new Random();
  38.         int[] arr = new int[10];
  39.         for (int i = 0; i < 10; ++i) {
  40.             for (int j = 0; j < 10; ++j) {
  41.                 arr[j] = Math.abs(random.nextInt()) % 20;
  42.                 System.out.print(arr[j] + " ");
  43.             }
  44.             System.out.println(" => " + maxDistance(arr));
  45.         }
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement