From a73455ec9fd47936289c73b34ce4006a916b4a50 Mon Sep 17 00:00:00 2001 From: PrakarshKamal Date: Thu, 19 Feb 2026 16:56:35 -0500 Subject: [PATCH] Complete Array-2 --- DisappearingNumbers.java | 43 ++++++++++++ GameOfLife.java | 139 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 DisappearingNumbers.java create mode 100644 GameOfLife.java diff --git a/DisappearingNumbers.java b/DisappearingNumbers.java new file mode 100644 index 00000000..907bb5a1 --- /dev/null +++ b/DisappearingNumbers.java @@ -0,0 +1,43 @@ +import java.util.*; + +// O(n) time, O(n) space +// class Solution { +// public List findDisappearedNumbers(int[] nums) { +// List ans = new ArrayList<>(); +// Set set = new HashSet<>(); + +// for (int num : nums) { +// set.add(num); +// } + +// for (int i = 1; i <= nums.length; i++) { +// if (!set.contains(i)) { +// ans.add(i+1); +// } +// } +// return ans; +// } +// } + +// O(n) time, O(1) space +class Solution { + public List findDisappearedNumbers(int[] nums) { + List ans = new ArrayList<>(); + int n = nums.length; + + for (int i = 0; i < n; i++) { + int idx = Math.abs(nums[i]) - 1; // idx of number + + if (nums[idx] > 0) { + nums[idx] = nums[idx] * -1; + } + } + + for (int i = 0; i < n; i++) { + if (nums[i] > 0) { + ans.add(i+1); + } + } + return ans; + } +} \ No newline at end of file diff --git a/GameOfLife.java b/GameOfLife.java new file mode 100644 index 00000000..f4378911 --- /dev/null +++ b/GameOfLife.java @@ -0,0 +1,139 @@ +// O(n * m) time, O(n * m) space +// class Solution { +// public void gameOfLife(int[][] board) { +// int n = board.length; +// int m = board[0].length; +// int[][] copy = new int[n][m]; + +// int[][] dirs = new int[][] { +// {0,1}, +// {0,-1}, +// {1,0}, +// {-1,0}, +// {1,1}, +// {-1,1}, +// {1,-1}, +// {-1,-1} +// }; + +// for (int i = 0; i < n; i++) { +// for (int j = 0; j < m; j++) { +// copy[i][j] = board[i][j]; +// } +// } + +// for (int i = 0; i < n; i++) { +// for (int j = 0; j < m; j++) { +// int cell = board[i][j]; +// int live = getLiveNeighbors(i, j, board, dirs); + +// if (cell == 1 && (live < 2 || live > 3)) { +// copy[i][j] = 0; +// } +// else if (cell == 1 && (live == 2 || live == 3)) { +// copy[i][j] = 1; +// } +// else if (cell == 0 && live == 3) { +// copy[i][j] = 1; +// } +// else { +// copy[i][j] = 0; +// } +// } +// } + +// for (int i = 0; i < n; i++) { +// for (int j = 0; j < m; j++) { +// board[i][j] = copy[i][j]; +// } +// } +// } + +// private int getLiveNeighbors(int i, int j, int[][] board, int[][] dirs) { +// int n = board.length; +// int m = board[0].length; + +// int liveCellCount = 0; + +// for (int[] dir : dirs) { +// int newI = i + dir[0]; +// int newJ = j + dir[1]; + +// if (newI >= 0 && newJ >= 0 && newI < n && newJ < m) { +// if (board[newI][newJ] == 1) { +// liveCellCount++; +// } +// } +// } +// return liveCellCount; +// } +// } + +// O(n * m) time, O(1) space +class Solution { + public void gameOfLife(int[][] board) { + int n = board.length; + int m = board[0].length; + + int[][] dirs = new int[][] { + {0,1}, + {0,-1}, + {1,0}, + {-1,0}, + {1,1}, + {-1,1}, + {1,-1}, + {-1,-1} + }; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + int cell = board[i][j]; + int live = getLiveNeighbors(i, j, board, dirs); + + if (cell == 1 && (live < 2 || live > 3)) { + board[i][j] = 5; // was alive now dead, alive -> dead + } + else if (cell == 1 && (live == 2 || live == 3)) { + board[i][j] = 1; + } + else if (cell == 0 && live == 3) { + board[i][j] = 10; // was dead now alive, dead -> alive + } + else { + board[i][j] = 0; + } + } + } + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (board[i][j] == 5) { // alive -> dead so now mark dead + board[i][j] = 0; + } + else if (board[i][j] == 10) { // dead -> alive so now mark alive + board[i][j] = 1; + } + } + } + } + + private int getLiveNeighbors(int i, int j, int[][] board, int[][] dirs) { + int n = board.length; + int m = board[0].length; + + int liveCellCount = 0; + + for (int[] dir : dirs) { + int newI = i + dir[0]; + int newJ = j + dir[1]; + + if (newI >= 0 && newJ >= 0 && newI < n && newJ < m) { + if (board[newI][newJ] == 1 || board[newI][newJ] == 5) { + liveCellCount++; + } + } + } + return liveCellCount; + } +} \ No newline at end of file