ogv

Untitled

ogv
Nov 28th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. class MedianFinder {
  2. TreeMap<Integer, Integer> map;
  3. int median;
  4. int lowerCount;
  5. int higherCount;
  6.  
  7. /** initialize your data structure here. */
  8. public MedianFinder() {
  9. map = new TreeMap<Integer, Integer>();
  10. }
  11.  
  12. public void addNum(int num) {
  13. Integer count = map.get(num);
  14. if (count == null) count = 0;
  15. count++;
  16. map.put(num, count);
  17.  
  18. if (map.size() > 1) {
  19. if (num > median) higherCount++;
  20. else if (num < median) lowerCount--;
  21.  
  22. int medianCount = map.get(median);
  23. System.out.println(num + " median=" + median + " medianCount=" + medianCount + " l=" + lowerCount + " h=" + higherCount);
  24.  
  25. if (higherCount > lowerCount + medianCount) {
  26. System.out.println("going higher");
  27. median = map.higherKey(median);
  28. lowerCount += medianCount;
  29. higherCount -= map.get(median);
  30. } else if (lowerCount < medianCount + higherCount - 2) {
  31. System.out.println("going lower");
  32. median = map.lowerKey(median);
  33. lowerCount -= map.get(median);
  34. higherCount += medianCount;
  35. }
  36.  
  37. System.out.println("after median=" + median + " medianCount=" + medianCount + " l=" + lowerCount + " h=" + higherCount);
  38. } else {
  39. median = num;
  40. lowerCount = 0;
  41. higherCount = 0;
  42. }
  43. }
  44.  
  45. public double findMedian() {
  46. if (higherCount > lowerCount) return (median + map.higherKey(median))/2;
  47. if (lowerCount < higherCount) return (median + map.lowerKey(median))/2;
  48. return median;
  49. }
  50. }
  51.  
  52. /**
  53. * Your MedianFinder object will be instantiated and called as such:
  54. * MedianFinder obj = new MedianFinder();
  55. * obj.addNum(num);
  56. * double param_2 = obj.findMedian();
  57. */
Advertisement
Add Comment
Please, Sign In to add comment