Skip to content

Commit 2918b3e

Browse files
committed
First 50 questions
1 parent bfbe7d0 commit 2918b3e

File tree

5 files changed

+245
-0
lines changed

5 files changed

+245
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.onufryk.exercise;
2+
3+
import com.onufryk.exercise.struct.LinkedList;
4+
import com.onufryk.exercise.struct.Node;
5+
6+
public class Question044 {
7+
8+
public static class SingleEntryList extends LinkedList {
9+
public void deduplicate() {
10+
if (this.root == null) {
11+
return;
12+
}
13+
Node previous = null;
14+
Node cursor = this.root;
15+
while (cursor != null) {
16+
Node next = cursor.getNext();
17+
18+
if (next != null && cursor.getValue() == next.getValue()) {
19+
Integer duplicatedValue = cursor.getValue();
20+
Node deleteMe = cursor;
21+
while (deleteMe != null && deleteMe.getValue() == duplicatedValue) {
22+
next = deleteMe.getNext();
23+
deleteMe = null;
24+
deleteMe = next;
25+
}
26+
if (previous == null) {
27+
this.root = next;
28+
} else {
29+
previous.setNext(next);
30+
}
31+
cursor = next;
32+
} else {
33+
previous = cursor;
34+
cursor = cursor.getNext();
35+
}
36+
37+
}
38+
39+
}
40+
41+
}
42+
43+
public static void main(String[] args) throws Exception {
44+
Node root = new Node(1, new Node(2, new Node(3, new Node (3, new Node(4, new Node(4, new Node (5)))))));
45+
SingleEntryList list = new SingleEntryList();
46+
list.init(root);
47+
48+
list.print();
49+
50+
list.deduplicate();
51+
52+
list.print();
53+
54+
}
55+
56+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.onufryk.exercise;
2+
3+
public class Question045 {
4+
public int[] numbers = null;
5+
6+
public interface Criterion {
7+
public boolean check(int number);
8+
}
9+
10+
public Question045(int[] numbers) {
11+
this.numbers = numbers;
12+
}
13+
14+
public void reorder(Criterion criterion) {
15+
int begin = 0;
16+
int end = this.numbers.length - 1;
17+
while (begin < end) {
18+
while (begin < end && !criterion.check(this.numbers[begin])) {
19+
begin++;
20+
}
21+
while (begin < end && criterion.check(this.numbers[end])) {
22+
end--;
23+
}
24+
if (begin < end) {
25+
int temp = this.numbers[begin];
26+
this.numbers[begin] = this.numbers[end];
27+
this.numbers[end] = temp;
28+
}
29+
30+
}
31+
}
32+
33+
public void print() {
34+
if (this.numbers == null) {
35+
System.out.println();
36+
return;
37+
}
38+
for (int ii = 0; ii < this.numbers.length; ii++) {
39+
System.out.print(this.numbers[ii]);
40+
System.out.print(" ");
41+
}
42+
System.out.println();
43+
}
44+
45+
public static void main(String[] args) {
46+
int[] numbers = { 1, 2, 3, 4, 5 };
47+
Question045 app = new Question045(numbers);
48+
app.print();
49+
Criterion isEven = new Criterion() {
50+
public boolean check(int num) {
51+
if ((num & 0x1) == 0)
52+
return true;
53+
return false;
54+
}
55+
};
56+
app.reorder(isEven);
57+
app.print();
58+
}
59+
60+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.onufryk.exercise;
2+
3+
public class Question046 {
4+
public int[] numbers = null;
5+
6+
7+
public Question046(int[] numbers) {
8+
this.numbers = numbers;
9+
}
10+
11+
public void print() {
12+
if (this.numbers == null) {
13+
System.out.println();
14+
return;
15+
}
16+
for (int ii = 0; ii < this.numbers.length; ii++) {
17+
System.out.print(this.numbers[ii]);
18+
System.out.print(" ");
19+
}
20+
System.out.println();
21+
}
22+
23+
public void remove(int number) {
24+
int begin = 0;
25+
int end = this.numbers.length - 1;
26+
while (this.numbers[begin] != number && begin < end) {
27+
begin++;
28+
}
29+
while (begin < end) {
30+
while (this.numbers[begin] != number && begin < end) {
31+
begin++;
32+
}
33+
while (this.numbers[end] == number && begin < end) {
34+
end--;
35+
}
36+
if (begin < end) {
37+
numbers[begin] = numbers[end];
38+
numbers[end] = number;
39+
}
40+
41+
}
42+
}
43+
44+
public static void main(String[] args) {
45+
int[] numbers = {4, 3, 2, 1, 2, 3, 6};
46+
Question046 app = new Question046(numbers);
47+
app.print();
48+
app.remove(2);
49+
app.print();
50+
}
51+
52+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.onufryk.exercise;
2+
3+
import com.onufryk.exercise.struct.BinaryTree;
4+
import com.onufryk.exercise.struct.TreeNode;
5+
6+
public class Question050 {
7+
public static class SubsctructuredBinaryTree<Item extends Comparable<Item>> extends BinaryTree<Item> {
8+
9+
public SubsctructuredBinaryTree() {
10+
super();
11+
12+
}
13+
14+
public SubsctructuredBinaryTree(TreeNode<Item> root) {
15+
super(root);
16+
}
17+
18+
public Boolean containsSubtree(TreeNode<Item> subtree) {
19+
return this.containsSubtree(this.root, subtree);
20+
}
21+
private Boolean containsSubtree(TreeNode<Item> tree, TreeNode<Item> subtree) {
22+
Boolean result = false;
23+
if (tree == null || subtree == null) {
24+
return false;
25+
}
26+
if (tree.value == subtree.value) {
27+
result = this.hasSubtree(tree, subtree);
28+
}
29+
if (!result) {
30+
result = this.containsSubtree(tree.left, subtree);
31+
}
32+
if (!result) {
33+
result = this.containsSubtree(tree.right, subtree);
34+
}
35+
return result;
36+
}
37+
private Boolean hasSubtree(TreeNode<Item> tree, TreeNode<Item> subtree) {
38+
Boolean result = false;
39+
if (subtree == null) {
40+
return true;
41+
}
42+
if (tree == null) {
43+
return false;
44+
}
45+
if (tree.value != subtree.value) {
46+
return false;
47+
}
48+
49+
return this.hasSubtree(tree.left, subtree.left) && this.hasSubtree(tree.right, subtree.right);
50+
}
51+
}
52+
53+
54+
public static void main(String[] args) {
55+
TreeNode<Integer> root = new TreeNode<Integer>(8,
56+
new TreeNode<Integer>(8,
57+
new TreeNode<Integer>(9),
58+
new TreeNode<Integer>(2,
59+
new TreeNode<Integer>(4),
60+
new TreeNode<Integer>(7)
61+
)
62+
),
63+
new TreeNode<Integer>(7)
64+
);
65+
TreeNode<Integer> sub = new TreeNode<Integer>(8, new TreeNode<Integer>(9), new TreeNode<Integer>(2));
66+
SubsctructuredBinaryTree<Integer> tree = new SubsctructuredBinaryTree<Integer>(root);
67+
tree.traverseInOrder();
68+
System.out.println(tree.containsSubtree(sub));
69+
}
70+
71+
}

src/com/onufryk/exercise/struct/TreeNode.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ public TreeNode() {
1313
public TreeNode(Item value) {
1414
this.value = value;
1515
}
16+
17+
public TreeNode(Item value, TreeNode<Item> left, TreeNode<Item> right) {
18+
this.value = value;
19+
this.left = left;
20+
this.right = right;
21+
}
1622

1723
public String toString() {
1824
if (this.value != null) {

0 commit comments

Comments
 (0)