Archive for the ‘Interview Questions’ Category
Java solution for “Longest Increasing Subsequence”
Thursday, December 10th, 2020
The Problem
In computer science, the longest increasing subsequence problem is to find a subsequence of a given sequence in which the subsequence’s elements are in sorted order, lowest to highest, and in which the subsequence is as long as possible. This subsequence is not necessarily contiguous, or unique.
https://en.wikipedia.org/wiki/Longest_increasing_subsequence
My solution
This is what I came up with (albeit in a short timeframe); it’s not the best or most efficient!
Main.java
package com.lstierneyltd.examples; public class Main { public static void main(String[] args) throws Exception { final LongestIncreasingSubsequenceSolver solver = new LongestIncreasingSubsequenceSolver(); solver.init(new int[]{10, 22, 9, 33, 21, 50, 41, 60}); solver.solve(); // 5 // Van der Corput sequence solver.init(new int[]{0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}); solver.solve(); // 6 } }
LongestIncreasingSubsequenceSolver.java
package com.lstierneyltd.examples; import java.util.ArrayList; import java.util.List; public class LongestIncreasingSubsequenceSolver { private int inputLength; private List<Integer> sequence; private List<Integer> input; public void init(final int[] inputArray) { inputLength = inputArray.length; input = new ArrayList<>(inputLength); sequence = new ArrayList<>(inputLength); int i; for (i = 0; i < inputLength; i++) { input.add(inputArray[i]); } for (i = 0; i < inputLength; i++) { sequence.add(i, 1); } } public void solve() { int i, j, max = 0; for (i = 1; i < inputLength; i++) { for (j = 0; j < i; j++) { if (input.get(i) > input.get(j) && sequence.get(i) < sequence.get(j) + 1) { sequence.set(i, sequence.get(j) + 1); } } } for (i = 0; i < inputLength; i++) { if (max < sequence.get(i)) { max = sequence.get(i); } } System.out.println("The Longest Subsequence length was: " + max); } }
Tags: java
Posted in Interview Questions | No Comments »
Java – deliberately cause Deadlock
Tuesday, August 4th, 2015
Another interview question.
When this code is executed runnable1 will wait for a lock on “b” and runnable2 will wait for a lock on “a”.
package test; /** * Deliberately try and cause deadlock * */ public class DeadLockTest { public static void main(String[] args) { final Object a = new Object(); final Object b = new Object(); final Runnable runnable1 = new Runnable() { public void run() { synchronized (a) { try { Thread.sleep(100); // Adding delay to increase chance of deadlock } catch (InterruptedException e) { e.printStackTrace(); } synchronized (b) { // We already have "a" abut need "b" too System.out.println("In runnable1"); } } } }; final Runnable runnable2 = new Runnable() { public void run() { synchronized (b) { // Has "b" but needs "a" synchronized (a) { System.out.println("In runnable2"); } } } }; new Thread(runnable1).start(); new Thread(runnable2).start(); } }
Tags: java
Posted in Interview Questions | No Comments »
Java – deliberately cause OutOfMemoryException
Tuesday, August 4th, 2015
package test; import java.util.ArrayList; import java.util.List; public class OutOfMemory { public static void main(String[] args) { final List<String>list = new ArrayList<String>(); int i = 1; while(true) { list.add(new String(System.nanoTime()+"")); list.addAll(list); System.out.println(i+ " " + Runtime.getRuntime().freeMemory()); i++; } } }
After a few seconds should output something like:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2245)
at java.util.Arrays.copyOf(Arrays.java:2219)
at java.util.ArrayList.grow(ArrayList.java:213)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:187)
at java.util.ArrayList.addAll(ArrayList.java:532)
at test.OutOfMemory.main(OutOfMemory.java:12)
Tags: java
Posted in Interview Questions | No Comments »