Skip to content

Commit 68ed621

Browse files
committed
Modified 2 solutions
1 parent 64ad1bb commit 68ed621

File tree

2 files changed

+52
-25
lines changed

2 files changed

+52
-25
lines changed

Hard/First Missing Positive.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,34 @@
11
class Solution {
22
public int firstMissingPositive(int[] nums) {
3-
Set<Integer> set = new HashSet<>();
4-
int max = 0;
3+
int i = 0;
4+
int n = nums.length;
5+
while (i < n) {
6+
// If in range 0..n & not in correct index then swap
7+
if (nums[i] >= 0 && nums[i] < n && nums[nums[i]] != nums[i]) {
8+
swap(nums, i, nums[i]);
9+
}
10+
else {
11+
i++;
12+
}
13+
}
514

6-
for (int num : nums) {
7-
set.add(num);
8-
max = Math.max(max, num);
15+
int k = 1;
16+
// Keep incrementing until the values are its correct position
17+
while (k < n && nums[k] == k) {
18+
k++;
919
}
1020

11-
for (int i = 1; i <= max; i++) {
12-
if (!set.contains(i)) {
13-
return i;
14-
}
21+
// If empty array or k breaks between the end of the array
22+
if (n == 0 || k < n) {
23+
return k;
1524
}
25+
26+
return nums[0] == k ? k + 1 : k;
27+
}
1628

17-
return max + 1;
29+
private void swap (int[] nums, int i, int num) {
30+
int temp = nums[i];
31+
nums[i] = nums[num];
32+
nums[num] = temp;
1833
}
1934
}

Medium/Number of Islands.java

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,41 @@
11
class Solution {
2+
int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
23
public int numIslands(char[][] grid) {
3-
int count = 0;
4+
if (grid.length == 0 || grid[0].length == 0) {
5+
return 0;
6+
}
7+
8+
int countOfIslands = 0;
9+
boolean[][] visited = new boolean[grid.length][grid[0].length];
10+
int numOfRows = grid.length;
11+
int numOfCols = grid[0].length;
412

5-
for (int i=0; i<grid.length; i++) {
6-
for (int j=0; j<grid[i].length; j++) {
7-
if (grid[i][j] == '1') {
8-
count++;
9-
10-
markArea(grid, i, j);
13+
for (int i = 0; i < numOfRows; i++) {
14+
for (int j = 0; j < numOfCols; j++) {
15+
if (visited[i][j] || grid[i][j] == '0') {
16+
continue;
1117
}
18+
19+
dfs(grid, i, j, numOfRows, numOfCols, visited);
20+
countOfIslands++;
1221
}
1322
}
1423

15-
return count;
24+
return countOfIslands;
1625
}
1726

18-
private void markArea(char[][] grid, int i, int j) {
19-
if (i < 0 || j < 0 || i >= grid.length || j >= grid[i].length || grid[i][j] == '0') {
27+
private void dfs(char[][] grid, int x, int y, int numOfRows, int numOfCols, boolean[][] visited) {
28+
if (x < 0 || x >= numOfRows || y < 0 || y >= numOfCols || visited[x][y]) {
29+
return;
30+
}
31+
32+
visited[x][y] = true;
33+
if (grid[x][y] == '0') {
2034
return;
2135
}
2236

23-
grid[i][j] = '0';
24-
markArea(grid, i-1, j);
25-
markArea(grid, i, j-1);
26-
markArea(grid, i, j+1);
27-
markArea(grid, i+1, j);
37+
for (int[] dir : dirs) {
38+
dfs(grid, x + dir[0], y + dir[1], numOfRows, numOfCols, visited);
39+
}
2840
}
2941
}

0 commit comments

Comments
 (0)