Skip to content

Instantly share code, notes, and snippets.

@bittib
bittib / LongestIncreasingSequence
Created May 26, 2013 06:09
Longest Increasing Sequence
/*
* Dynamic Programming Solution
* f[i] : longest increasing sequence of A[0..i], f[i] = max{f[j]} + 1, 0<= j < i
* Time complexity : O(n^2) ; Space complexity : O(n)
*/
public int lis(int[] A){
int n = A.length, maxLength = 0;
int[] f = new int[n];
for (int i=0; i<n; i++){
f[i] = 1;
@bittib
bittib / MergeInterval.java
Created May 24, 2013 12:10
Merge Interval Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18].
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
ArrayList<Interval> list = new ArrayList<Interval>();
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval x, Interval y) {
if (x.start == y.start)
return x.end - y.end;
else
return x.start - y.start;
}
});
@bittib
bittib / InsertInterval.java
Last active December 9, 2016 07:04
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9]. Example 2: Given [1,2],[3,5],[6,7],[8,10],[12,16], inser…
public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval x) {
ArrayList<Interval> list = new ArrayList<Interval>();
boolean done = false;
Itrator<Interval> iterator = intervals.iterator();
while (iterator.hasNext() {
Interval itv = iterator.next();
if (done || itv.end < x.start){
list.add(itv);
}else if (x.end < itv.start){
list.add(x);
@bittib
bittib / TrappingRainWater.java
Created May 22, 2013 12:31
Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6
public int trap(int[] A){
int n = A.length, sum = 0;
if (n < 3) return 0;
int[] leftBar = new int[n], rightBar = new int[n];
for (int i=1; i<n; i++)
leftBar[i] = Math.max(leftBar[i-1], A[i-1]);
for (int i=n-2; i>=0; i--)
rightBar[i] = Math.max(rightBar[i+1], A[i+1]);
for (int i=0; i<n; i++)
sum += Math.max(0, Math.min(leftBar[i], rightBar[i]) - A[i]);
@bittib
bittib / SerializingBinaryTree.java
Created May 21, 2013 15:59
Serialize and Deserialize a Binary Tree (pre order).
class TreeNode{
int val;
TreeNode left, right;
TreeNode(int val){
this.val = val;
}
}
public String serialize(TreeNode root){
StringBuilder sb = new StringBuilder();
@bittib
bittib / FlattenBinaryTreeToLinkedList.java
Last active December 9, 2016 07:05
Flatten Binary Tree to Linked List. Time Complexity : O(n). Don't use extral space.
class TreeNode{
int val;
TreeNode left, right;
TreeNode(int val){
this.val = val;
}
}
public void flatten(TreeNode root){
root = flatten(root, null);
@bittib
bittib / AddBinary.java
Last active December 9, 2016 07:06
Add binary string
/**
* LeetCode Add Binary Probem
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
*/
@bittib
bittib / gist:5567049
Created May 13, 2013 08:59
find the minimum and maximum element from an array with minimum time of comparision
/**
* Time Complexity : Comparision time : 3 * n/2 + 1
*/
public int[] findMinMax(int[] A){
int n = A.length;
if (n == 0) return null;
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
for (int i=0; i < n-1; i+=2){
int smaller = A[i], bigger = A[i+1];
if (A[i] > A[i+1){
@bittib
bittib / gist:5566920
Created May 13, 2013 08:27
find max of K size sliding window from a stream
/**
* Time Complexity: O(n)
*/
public int[] minOfSlidingWindow(int[] A, int k){
int n = A.length;
int[] B = new int[n - k + 1];
int[] queue = new int[n];
int head = 0, tail = 0;
for (int i=0; i<n; i++){
while (head < tail && A[i] <= A[queue[tail-1]])
@bittib
bittib / KthSmallestOfTwoSortedArrays.java
Last active June 3, 2021 21:43
Find the k-th Smallest Element in the Union of Two Sorted Arrays
/**
* http://leetcode.com/2011/01/find-k-th-smallest-element-in-union-of.html
* O(lgm + lgn) Solution
*/
static final int MIN = Integer.MIN_VALUE;
static final int MAX = Integer.MAX_VALUE;
public static int kthSmallest(int[] A, int[] B, int k){
if (A == null || B == null || k > A.length + B.length)