Hi Team,
Can someone please help me figure out the Runtime for this code ? Below is my solution for this problem :- https://leetcode.com/problems/output-contest-matches/description/
/**
*
*/
class Solution {
public String findContestMatch(int n) {
TreeSet<Node> nodes;
if(n > 1 && (n&n-1) == 0) { //O(c)
nodes = new TreeSet<>(); //O(c)
for(int i = 0; i < n; i++) { //O(n)
nodes.add(new Node(i+1)); //O(c)
}
while(nodes.size() != 1){ //O(log(n))
nodes = pairTeams(nodes);
}
} else {
System.out.println("Invalid test data");
return null;
}
return nodes.first() != null ? nodes.first().toString() : null; //O(c)
}
private TreeSet<Node> pairTeams(TreeSet<Node> nodes) {
TreeSet<Node> resultNodes = null;
if(nodes != null && nodes.size() > 0) {
resultNodes = new TreeSet<Node>();
while(nodes.size() > 0) { //O(n/2)
Node node1 = nodes.first(); //O(c)
Node node2 = nodes.last(); //O(c)
int value = node1.value < node2.value ? node1.value : node2.value; //O(c)
Node newNode = new Node(node1, node2, value); //O(c)
resultNodes.add(newNode); //O(log(n/2))
nodes.remove(node1); //O(log(n))
nodes.remove(node2); //O(log(n))
}
}
return resultNodes;
}
class Node implements Comparable {
public Node left;
public Node right;
public int value;
public Node(int value) {
this.value = value;
}
public Node(Node left, Node right, int value) {
this.value = value;
this.left = left;
this.right = right;
}
public int compareTo(Object obj) {
Node node2 = (Node)obj;
if(node2 == null) {
return -1;
}
return this.value - node2.value;
}
public String toString() {
if(left != null && right != null) {
return "(" + left.toString() + "," + right.toString() + ")";
} else {
return String.valueOf(this.value);
}
}
}
}