Skip to content

Commit 24b1cd6

Browse files
committed
Added More Solutions
1 parent 90d1fc1 commit 24b1cd6

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
7+
/**
8+
*
9+
* @author architgarg
10+
*/
11+
import java.util.*;
12+
public class MedianRunning {
13+
public static void main(String args[]) {
14+
int a[] = {1, 9, 8, 19, 15, 5};
15+
double arr[] = findMedian(a);
16+
for (int i = 0; i < arr.length; i++) {
17+
System.out.print(arr[i] + " ");
18+
}
19+
}
20+
21+
public static double[] findMedian(int a[]) {
22+
PriorityQueue<Integer> lowers = new PriorityQueue<>(new Comparator<Integer>() {
23+
@Override
24+
public int compare(Integer o1, Integer o2) {
25+
return -1 * o1.compareTo(o2);
26+
}
27+
28+
});
29+
PriorityQueue<Integer> highers = new PriorityQueue<>();
30+
double median[] = new double[a.length];
31+
for (int i = 0; i < a.length; i++) {
32+
int number = a[i];
33+
addNumber(number, lowers, highers);
34+
rebalance(lowers, highers);
35+
median[i] = getMedian(lowers, highers);
36+
}
37+
38+
return median;
39+
}
40+
41+
public static void addNumber(int number, PriorityQueue<Integer> lowers, PriorityQueue<Integer> highers) {
42+
if (lowers.size() == 0 || number < lowers.peek()) {
43+
lowers.add(number);
44+
}
45+
else
46+
highers.add(number);
47+
}
48+
49+
public static void rebalance(PriorityQueue<Integer> lowers, PriorityQueue<Integer> highers) {
50+
PriorityQueue<Integer> biggerHeap = lowers.size() > highers.size() ? lowers : highers;
51+
PriorityQueue<Integer> smallerHeap = lowers.size() > highers.size() ? highers : lowers;
52+
if ((biggerHeap.size() - smallerHeap.size()) >= 2) {
53+
smallerHeap.add(biggerHeap.poll());
54+
}
55+
}
56+
57+
public static double getMedian(PriorityQueue<Integer> lowers, PriorityQueue<Integer> highers) {
58+
PriorityQueue<Integer> biggerHeap = lowers.size() > highers.size() ? lowers : highers;
59+
PriorityQueue<Integer> smallerHeap = lowers.size() > highers.size() ? highers : lowers;
60+
if (biggerHeap.size() == smallerHeap.size()) {
61+
return ((double)(biggerHeap.peek() + smallerHeap.peek()) / 2 );
62+
}
63+
return biggerHeap.peek();
64+
}
65+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
7+
/**
8+
*
9+
* @author architgarg
10+
*/
11+
import java.util.*;
12+
public class BTM {
13+
public static void main(String args[]) {
14+
Map<Long, Integer> tm = new TreeMap<>();
15+
Scanner sc = new Scanner(System.in);
16+
int n = 6;
17+
long[] timestamp = {1472568095, 1472620192, 1472630264, 1472635488, 1472641430, 1472635488};
18+
int people[] = {59, 50, 5, 59, 60, 2};
19+
int currPeople = 0;
20+
String status[] = {"E", "X", "X", "E", "X", "X"};
21+
for (int i = 0; i < n; i++) {
22+
if (status[i].equals("E")) {
23+
currPeople += people[i];
24+
if (tm.containsKey(timestamp[i])) {
25+
int val = tm.get(timestamp[i]);
26+
val += currPeople;
27+
tm.put(timestamp[i], val);
28+
}
29+
else {
30+
tm.put(timestamp[i], currPeople);
31+
}
32+
}
33+
else {
34+
currPeople -= people[i];
35+
if (tm.containsKey(timestamp[i])) {
36+
int val = tm.get(timestamp[i]);
37+
val -= currPeople;
38+
tm.put(timestamp[i], val);
39+
}
40+
else {
41+
tm.put(timestamp[i], currPeople);
42+
}
43+
}
44+
}
45+
int maxPeople = 0;
46+
long maxTimeStamp = 0;
47+
long secTimeStamp = 0;
48+
int f = 0;
49+
for (Map.Entry<Long, Integer> entry : tm.entrySet()) {
50+
if (f == 1) {
51+
secTimeStamp = entry.getKey();
52+
f = 0;
53+
}
54+
if (entry.getValue() > maxPeople) {
55+
maxPeople = entry.getValue();
56+
maxTimeStamp = entry.getKey();
57+
f = 1;
58+
}
59+
}
60+
//System.out.println(maxTimeStamp);
61+
/* for (Map.Entry<Long, Integer> entry : tm.entrySet()) {
62+
if (f == 1) {
63+
64+
}
65+
if (entry.getKey() == maxTimeStamp) {
66+
f = 1;
67+
}
68+
}*/
69+
System.out.println("" + maxTimeStamp + " " + secTimeStamp);
70+
}
71+
}

0 commit comments

Comments
 (0)