Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.45 KB | None | 0 0
  1. package com.waze;
  2.  
  3. import java.io.IOException;
  4. import java.nio.file.Files;
  5. import java.nio.file.Paths;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.stream.Collectors;
  9. import java.util.stream.Stream;
  10.  
  11. /**
  12.  * @author Matan Sabag
  13.  * @date 24/04/2019
  14.  * Answer from test 31053880
  15.  */
  16. public class FirstInteger {
  17.  
  18.     static class Range {
  19.  
  20.         long start;
  21.         long end;
  22.  
  23.         Range(long start, long end) {
  24.             this.start = start;
  25.             this.end = end;
  26.         }
  27.     }
  28.  
  29.     public static long getFirstNumber(List<Range> ranges) {
  30.         ranges.sort((r1, r2) -> {
  31.             int c = Long.compare(r1.start, r2.start);
  32.             if (c == 0) return Long.compare(r1.end, r2.end);
  33.             return c;
  34.         }); // O(n log n)
  35.         List<Range> merged = mergeRanges(ranges);
  36.         Long candidate = 0L;
  37.         for (int i = 0; i < merged.size(); i++) {
  38.             Range r = merged.get(i);
  39.             if (candidate < r.start) return candidate;
  40.             candidate = r.end + 1;
  41.         }
  42.         return candidate;
  43.     }
  44.  
  45.     private static List<Range> mergeRanges(List<Range> ranges) {
  46.         ArrayList<Range> list = new ArrayList<>();
  47.         if (ranges == null || ranges.size() == 0) return list;
  48.         list.add(ranges.get(0));
  49.         for (int i = 1; i < ranges.size(); i++) {
  50.             Range r = ranges.get(i);
  51.             if (r.start > list.get(list.size() - 1).end) {
  52.                 list.add(r);
  53.             } else {
  54.                 Range lastInterval = list.get(list.size() - 1);
  55.                 lastInterval.start = Math.min(lastInterval.start, r.start);
  56.                 lastInterval.end = Math.max(lastInterval.end, r.end);
  57.             }
  58.         }
  59.         return list;
  60.     }
  61.  
  62.     public static Range rowToRange(String s) {
  63.         String[] split = s.split("-");
  64.         return new Range(Long.valueOf(split[0]), Long.valueOf(split[1]));
  65.     }
  66.  
  67.     public static void main(String[] args) {
  68.  
  69.         String fileName = "C:\\dev\\crack\\src\\com\\waze\\test.txt";
  70.         List<Range> list;
  71.  
  72.         try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
  73.  
  74.             list = stream
  75.                     .map(FirstInteger::rowToRange)
  76.                     .collect(Collectors.toCollection(ArrayList::new));
  77.         } catch (IOException e) {
  78.             e.printStackTrace();
  79.             return;
  80.         }
  81.         System.out.println(getFirstNumber(list));
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement