Advertisement
rajeshinternshala

Untitled

Oct 14th, 2023
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. class Main {
  4.  
  5.     // Function to find maximum distance between every two elements
  6.     private static List<Integer> result;
  7.  
  8.     static void findMaxDistance(List<Integer> data, List<Integer> temp) {
  9.  
  10.         // Stores index of last occurrence of each array element
  11.         Map<Integer, Integer> mp = new HashMap<>();
  12.  
  13.         // Initialize temp[] with -1
  14.         for (int i = 1; i <= data.size(); i++) {
  15.             temp.add(-1);
  16.         }
  17.  
  18.         // Traverse the list
  19.         for (int i = 0; i < data.size(); i++) {
  20.  
  21.             // If list element has not occurred previously
  22.             if (!mp.containsKey(data.get(i))) {
  23.  
  24.                 // Update index in temp
  25.                 temp.set(data.get(i) - 1, i + 1);
  26.             } else {
  27.  
  28.                 // Compare temp[a[i]] with distance from its previous occurrence
  29.                 // and store the maximum
  30.                 temp.set(data.get(i) - 1, Math.max(temp.get(data.get(i) - 1), i - mp.getOrDefault(data.get(i), 0)));
  31.             }
  32.  
  33.             mp.put(data.get(i), i);
  34.         }
  35.  
  36.         for (int i = 1; i <= data.size(); i++) {
  37.  
  38.             // Compare temp[i] with distance of its last occurrence from the end of the list
  39.             // and store the maximum
  40.             if (temp.get(i - 1) != -1) {
  41.                 temp.set(i - 1, Math.max(temp.get(i - 1), data.size() - mp.getOrDefault(i, 0)));
  42.             }
  43.         }
  44.     }
  45.  
  46.     // Function to find the minimum common element in subarrays of all possible lengths
  47.     static void minCommonElement(List<Integer> data, List<Integer> ans, List<Integer> temp) {
  48.  
  49.         // Function call to find the maximum distance between every pair of repetition
  50.         findMaxDistance(data, temp);
  51.  
  52.         // Initialize ans[] to -1
  53.         for (int i = 1; i <= data.size(); i++) {
  54.             ans.add(-1);
  55.         }
  56.  
  57.         for (int i = 1; i <= data.size(); i++) {
  58.  
  59.             // Check if subarray of length temp[i] contains i as one of the common elements
  60.             if (temp.get(i - 1) >= 0 && ans.get(temp.get(i - 1) - 1) == -1) {
  61.                 ans.set(temp.get(i - 1) - 1, i);
  62.             }
  63.         }
  64.  
  65.         for (int i = 1; i <= data.size(); i++) {
  66.  
  67.             // Find the minimum of all common elements
  68.             if (i > 1 && ans.get(i - 2) != -1) {
  69.                 if (ans.get(i - 1) == -1) {
  70.                     ans.set(i - 1, ans.get(i - 2));
  71.                 } else {
  72.                     ans.set(i - 1, Math.min(ans.get(i - 1), ans.get(i - 2)));
  73.                 }
  74.             }
  75.  
  76.             result.add(ans.get(i - 1));
  77.         }
  78.     }
  79.  
  80.  
  81.     private List<Integer> minCommon(List<Integer> data) {
  82.         result = new ArrayList<>();
  83.         List<Integer> temp = new ArrayList<>(Collections.nCopies((int) ((2 * 1e5) + 1), -1));
  84.         List<Integer> ans = new ArrayList<>(Collections.nCopies((int) ((2 * 1e5) + 1), -1));
  85.         minCommonElement(data, ans, temp);
  86.         return result;
  87.  
  88.     }
  89. }
  90.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement