The WeakReference class, monitoring memory leak and garbage collection in a Java application

Image
 Below is a Stack implementation that uses an internal resizeable array structure.  public class MyStack< T > implements Stack< T > { private static final int CAPACITY = 100 ; private Object[] array ; private int pos = 0 ; public MyStack () { this . array = new Object[ CAPACITY ] ; } @Override public void push ( T item) { if ( pos >= array . length / 2 ) { Object[] newArray = new Object[ pos * 2 ] ; System. arraycopy ( array , 0 , newArray , 0 , array . length ) ; array = newArray ; } array [ pos ++] = item ; } @Override public T pop () { if (isEmpty()) { throw new RuntimeException( "empty stack" ) ; } @SuppressWarnings ( "unchecked" ) T item = ( T ) array [ pos - 1 ] ; pos -= 1 ; return item ; } @Override @SuppressWarnings ( "unchecked" ) public T peek...

My Crappy Looking Solution to "Binary Tree Common Ancestor" Problem

I was able to solve this problem and make all the tests pass:

https://www.hackerrank.com/challenges/binary-search-tree-lowest-common-ancestor/problem

But I'm not happy with the code, so later I need to refactor the code. Here it is:

static Node lca(Node root, int v1, int v2) {

    ArrayList result = new ArrayList<>();

    Node result2 =
            traverse(root, v1, v2, result);

    if (result.isEmpty())
        return result2;

    return result.get(0);
}

private static Node traverse(Node root, int v1, int v2, ArrayList result) {

    if (!result.isEmpty()) {
        return result.get(0);
    }

    if (root.left == null && root.right == null) {
        return root;
    }

    if (root.data == v1 || root.data == v2) {
        return root;
    }

    Node node1 = null, node2 = null;

    if (root.left != null)
        node1 = traverse(root.left, v1, v2, result);

    if (root.right != null)
        node2 = traverse(root.right, v1, v2, result);

    if (!result.isEmpty()) {
        return result.get(0);
    }

    if (node1 != null && node1.data == v1 &&
            node2 != null && node2.data == v2) {
        result.add(root);
        return root;
    }
    if (node1 != null && node1.data == v2 &&
            node2 != null && node2.data == v1) {
        result.add(root);
        return root;
    }


    if (node1 == null && node2 == null)
        return null;

    if (node1 != null && node1.data == v1) {
        return node1;
    }
    if (node1 != null && node1.data == v2) {
        return node1;
    }
    if (node2 != null && node2.data == v1) {
        return node2;
    }
    if (node2 != null && node2.data == v2) {
        return node2;
    }


    return null;
}

Thanks to this youtube channel for describing the algorithm:

https://www.youtube.com/watch?v=F-_1sbnPbWQ&t=301s

Comments

Popular posts from this blog

Trie Data Structure and Finding Patterns in a Collection of Words

A Graph Application in Java: Using WordNet to Find Outcast Words