syeedibnfaiz
BAN USERpublic void merge(int[] a, int begin, int n) {
if (n == 1) return;
int p1 = begin;
int p2 = p1 + n;
int p3 = p2 + n;
int b = a[p2];
int c = a[p3];
for (int i = p3-1; i > p2; i--) {
a[i + 1] = a[i];
}
for (int i = p2-1; i > begin; i--) {
a[i + 2] = a[i];
}
a[begin + 1] = b;
a[begin + 2] = c;
merge(a, begin + 3, n - 1);
}
public Tree inorder(Tree parent, Tree t) {
if (t == null) return null;
Tree last = inorder(parent, t.left);
if (last == null && parent != null) parent.next = t;
else last.next = t;
if (t.right == null) return t;
return inorder(t, t.right);
}
The root is obviously the maximum element.
- syeedibnfaiz February 07, 2012A simple DP will do.
s[0] = true
s[i] = true if either s[i-6], s[i-9] or s[i-17] is true
My solution takes O(1) extra space.
- syeedibnfaiz February 07, 2012