Advertisement
ogv

Untitled

ogv
Nov 9th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.00 KB | None | 0 0
  1. // Runtime: 2 ms, faster than 99.67% of Java online submissions for Reorder Data in Log Files.
  2. // Memory Usage: 38.9 MB, less than 70.59% of Java online submissions for Reorder Data in Log Files.
  3. class Solution {
  4.     public String[] reorderLogFiles(String[] logs) {
  5.         int len = logs.length;
  6.         String[] ids = new String[len];
  7.         String[] letterPart = new String[len];
  8.        
  9.         for (int i = 0; i < len; i++) {
  10.             String log = logs[i];
  11.            
  12.             int spaceIndex = log.indexOf(' ');
  13.             ids[i] = log.substring(0, spaceIndex);
  14.            
  15.             int idx = spaceIndex;
  16.             while (log.charAt(idx) == ' ') idx++;
  17.            
  18.             String rest = log.substring(idx);
  19.             if (!Character.isDigit(rest.charAt(0))) {
  20.                 letterPart[i] = rest;                
  21.             }
  22.         }
  23.        
  24.         Integer[] indexes = new Integer[len];
  25.         for (int i = 0; i < len; i++) indexes[i] = i;
  26.        
  27.         Arrays.sort(indexes, new Comparator<Integer>() {
  28.             public int compare(Integer a, Integer b) {                
  29.                 if (letterPart[a] != null && letterPart[b] != null) {
  30.                     int restCompare = letterPart[a].compareTo(letterPart[b]);
  31.                    
  32.                     if (restCompare != 0) return restCompare;
  33.                     else return ids[a].compareTo(ids[b]);
  34.                 }
  35.                 else if (letterPart[a] != null && letterPart[b] == null) {
  36.                     return -1;    
  37.                 }
  38.                 else if (letterPart[a] == null && letterPart[b] != null) {
  39.                     return +1;
  40.                 }
  41.                 else /*(letterPart[a] == null && letterPart[b] == null)*/ {
  42.                     return a - b;
  43.                 }                
  44.             }
  45.         });
  46.        
  47.         String[] result = new String[len];        
  48.         for (int i = 0; i < len; i++) result[i] = logs[indexes[i]];    
  49.         return result;
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement