Skip to content

Commit 2cc35cf

Browse files
solves #380: Insert Delete GetRandom O(1) in java
1 parent d9f7c8c commit 2cc35cf

File tree

3 files changed

+73
-53
lines changed

3 files changed

+73
-53
lines changed

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@
292292
| 359 | 🔒 [Logger Rate Limiter](https://leetcode.com/problems/logger-rate-limiter) | | |
293293
| 367 | [Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square) | [![Java](assets/java.png)](src/IsPerfectSquare.java) [![Python](assets/python.png)](python/valid_perfect_square.py) | |
294294
| 374 | [Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower) | [![Java](assets/java.png)](src/GuessNumberHigherOrLower.java) [![Python](assets/python.png)](python/guess_number_higher_or_lower.py) | |
295+
| 380 | [Insert Delete GetRandom O(1)](https://leetcode.com/problems/insert-delete-getrandom-o1) | [![Java](assets/java.png)](src/InsertDeleteGetRandomO1.java) | |
295296
| 383 | [Ransom Note](https://leetcode.com/problems/ransom-note) | [![Java](assets/java.png)](src/RansomNote.java) [![Python](assets/python.png)](python/ransom_note.py) | |
296297
| 387 | [First Unique Character in String](https://leetcode.com/problems/first-unique-character-in-a-string) | [![Java](assets/java.png)](src/FirstUniqueCharacter.java) [![Python](assets/python.png)](python/first_unique_character_in_string.py) | |
297298
| 389 | [Find the Difference](https://leetcode.com/problems/find-the-difference) | [![Java](assets/java.png)](src/FindTheDifference.java) [![Python](assets/python.png)](python/find_the_difference.py) | |

Diff for: src/HelloWorld.java

+27-53
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,39 @@
1-
import java.util.Scanner;
1+
import java.util.*;
22

33
public class HelloWorld {
4-
private static final Scanner SCANNER = new Scanner(System.in);
5-
6-
private static void spiralOrder(int[][] matrix){
7-
final int rows = matrix.length, columns = matrix[0].length, elements = rows * columns;
8-
for (int i = 0, top = 0, bottom = rows, left = 0, right = columns ; ; ) {
9-
for (int row = top, column = left ; column < right ; column++, i++) {
10-
System.out.print(matrix[row][column]);
11-
}
12-
top++;
13-
if (i == elements) break;
14-
for (int row = top, column = right - 1 ; row < bottom ; row++, i++) {
15-
System.out.print(matrix[row][column]);
16-
}
17-
right--;
18-
if (i == elements) break;
19-
for (int row = bottom - 1, column = right - 1 ; column >= left ; column--, i++) {
20-
System.out.print(matrix[row][column]);
21-
}
22-
bottom--;
23-
if (i == elements) break;
24-
for (int row = bottom - 1, column = left ; row >= top ; row--, i++) {
25-
System.out.print(matrix[row][column]);
4+
static class RandomizedSet {
5+
private final Random random = new Random();
6+
private final List<Integer> list = new ArrayList<>();
7+
private final Map<Integer, Integer> indexMapping = new HashMap<>();
8+
9+
public boolean insert(int val) {
10+
if (indexMapping.containsKey(val)) {
11+
return false;
2612
}
27-
left++;
28-
if (i == elements) break;
13+
list.add(val);
14+
indexMapping.put(val, list.size() - 1);
15+
return true;
2916
}
30-
}
31-
32-
private static int intInput(final String string) {
33-
System.out.print(string);
34-
final int i = SCANNER.nextInt();
35-
return i;
36-
}
3717

38-
private static void print(int[][] matrix) {
39-
for (int[] row : matrix) {
40-
for (int element : row) {
41-
System.out.print(element + " ");
42-
}
43-
System.out.println();
18+
private int last() {
19+
return this.list.getLast();
4420
}
45-
}
46-
47-
public static void main(String[] args) {
48-
final int rows = intInput("Enter row size: ");
49-
final int columns = intInput("Enter column size: ");
50-
final int[][] matrix = new int[rows][columns];
5121

52-
System.out.println("Enter array elements:");
53-
54-
for (int i = 0 ; i < rows ; i++) {
55-
for(int j = 0 ; j < columns ; j++) {
56-
matrix[i][j] = SCANNER.nextInt();
22+
public boolean remove(int val) {
23+
if (!indexMapping.containsKey(val)) {
24+
return false;
5725
}
26+
final int index = indexMapping.get(val);
27+
indexMapping.put(last(), index);
28+
indexMapping.remove(val);
29+
list.set(index, last());
30+
list.removeLast();
31+
return true;
5832
}
5933

60-
spiralOrder(matrix);
61-
62-
System.out.println("\n\nOriginal matrix");
63-
print(matrix);
34+
public int getRandom() {
35+
final int randomIndex = random.nextInt(list.size());
36+
return list.get(randomIndex);
37+
}
6438
}
6539
}

Diff for: src/InsertDeleteGetRandomO1.java

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// https://leetcode.com/problems/insert-delete-getrandom-o1
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.Random;
8+
9+
public class InsertDeleteGetRandomO1 {
10+
static class RandomizedSet {
11+
private final Random random = new Random();
12+
private final List<Integer> list = new ArrayList<>();
13+
private final Map<Integer, Integer> indexMapping = new HashMap<>();
14+
15+
public boolean insert(int val) {
16+
if (indexMapping.containsKey(val)) {
17+
return false;
18+
}
19+
list.add(val);
20+
indexMapping.put(val, list.size() - 1);
21+
return true;
22+
}
23+
24+
private int last() {
25+
return this.list.getLast();
26+
}
27+
28+
public boolean remove(int val) {
29+
if (!indexMapping.containsKey(val)) {
30+
return false;
31+
}
32+
final int index = indexMapping.get(val);
33+
indexMapping.put(last(), index);
34+
indexMapping.remove(val);
35+
list.set(index, last());
36+
list.removeLast();
37+
return true;
38+
}
39+
40+
public int getRandom() {
41+
final int randomIndex = random.nextInt(list.size());
42+
return list.get(randomIndex);
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)