Skip to content

Commit 5cad9a6

Browse files
authored
Update First Unique Number.java
1 parent 9d404d9 commit 5cad9a6

File tree

1 file changed

+48
-37
lines changed

1 file changed

+48
-37
lines changed

Medium/First Unique Number.java

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,67 @@
11
class FirstUnique {
2-
Node head;
3-
Node tail;
4-
Map<Integer, Node> map;
5-
int MX_VAL = Integer.MAX_VALUE;
6-
int MN_VAL = Integer.MIN_VALUE;
2+
3+
private Node head;
4+
private Node tail;
5+
private Map<Integer, Node> map;
6+
77
public FirstUnique(int[] nums) {
8-
map = new HashMap<>();
9-
head = new Node(MN_VAL);
10-
tail = new Node(MX_VAL);
11-
head.next = tail;
12-
tail.prev = head;
8+
this.head = new Node(-1);
9+
this.tail = new Node(-1);
10+
this.head.next = this.tail;
11+
this.tail.prev = this.head;
12+
this.map = new HashMap<>();
1313
for (int num : nums) {
14-
add(num);
14+
if (map.containsKey(num)) {
15+
deleteNode(map.get(num));
16+
} else {
17+
Node node = new Node(num);
18+
map.put(num, node);
19+
addToTail(node);
20+
}
1521
}
1622
}
1723

1824
public int showFirstUnique() {
19-
return head.next.val == MX_VAL ? -1 : head.next.val;
25+
return this.head.next.val;
2026
}
2127

2228
public void add(int value) {
2329
if (map.containsKey(value)) {
24-
if (map.get(value) != null) {
25-
remove(map.get(value));
26-
map.put(value, null);
27-
}
28-
}
29-
else {
30-
Node newNode = new Node(value);
31-
map.put(value, newNode);
32-
newNode.prev = tail.prev;
33-
tail.prev.next = newNode;
34-
newNode.next = tail;
35-
tail.prev = newNode;
30+
deleteNode(map.get(value));
31+
return;
3632
}
33+
Node node = new Node(value);
34+
map.put(value, node);
35+
addToTail(node);
3736
}
3837

39-
private void remove(Node node) {
40-
Node prev = node.prev;
41-
Node next = node.next;
42-
prev.next = next;
43-
next.prev = prev;
38+
private void addToTail(Node node) {
39+
Node prevToTail = this.tail.prev;
40+
prevToTail.next = node;
41+
node.next = this.tail;
42+
node.prev = prevToTail;
43+
this.tail.prev = node;
4444
}
45-
}
46-
47-
class Node {
48-
int val;
49-
Node next;
50-
Node prev;
5145

52-
public Node(int val) {
53-
this.val = val;
46+
private void deleteNode(Node node) {
47+
if (node == null) {
48+
return;
49+
}
50+
map.put(node.val, null);
51+
Node prevToNode = node.prev;
52+
Node nextToNode = node.next;
53+
prevToNode.next = nextToNode;
54+
nextToNode.prev = prevToNode;
55+
}
56+
57+
private static class Node {
58+
int val;
59+
Node next;
60+
Node prev;
61+
62+
public Node(int val) {
63+
this.val = val;
64+
}
5465
}
5566
}
5667

0 commit comments

Comments
 (0)