数组 48. 旋转图像 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public void rotate (int [][] matrix) { int m = matrix.length; int [][] tmp = new int [m][m]; for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < m; j++){ tmp[j][m - i - 1 ] = matrix[i][j]; } } for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < m; j++){ matrix[i][j] = tmp[i][j]; } } } }
73. 矩阵置零 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public void setZeroes (int [][] matrix) { int m = matrix.length; int n = matrix[0 ].length; boolean [] row = new boolean [m]; boolean [] col = new boolean [n]; for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < n; j++){ if (matrix[i][j] == 0 ){ row[i] = true ; col[j] = true ; } } } for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < n; j++){ if (col[j] == true || row[i] == true ) matrix[i][j] = 0 ; } } } }
289. 生命游戏 - 力扣(LeetCode)
使用.clone只是对于数组进行了浅拷贝,意思就是,修改到原数组仍然会影响到复制后的数组
对于此题目,我本来想着使用.clone方法直接拷贝一份原数组,然后进行之后的操作发现我修改了复制之后的数组原数组也会跟着改变,这也算是学到了一些吧~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class Solution { public void gameOfLife (int [][] board) { int m = board.length; int n = board[0 ].length; int [][] cp = new int [m][n]; int [] neighbours = {-1 ,0 ,1 }; for (int i = 0 ; i < m; i++){ System.arraycopy(board[i], 0 , cp[i], 0 , n); } for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < n; j++){ int live_body = 0 ; for (int k = 0 ; k < 3 ; k++) { for (int l = 0 ; l < 3 ; l++){ if (!(neighbours[k] == 0 && neighbours[l] == 0 )){ int r = i + neighbours[k]; int c = j + neighbours[l]; if ((r >= 0 && r < m) && (c >= 0 && c < n) && cp[r][c] == 1 ){ live_body ++; } } } } if (cp[i][j] == 1 && (live_body < 2 || live_body > 3 )) board[i][j] = 0 ; if (cp[i][j] == 0 && (live_body == 3 )) board[i][j] = 1 ; } } } }
661. 图片平滑器 - 力扣(LeetCode)
求周围平均值的模板模拟题类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class Solution { public int [][] imageSmoother(int [][] img) { int m = img.length; int n = img[0 ].length; int [][] ans = new int [m][n]; int [] neighbours = {-1 , 0 , 1 }; for (int i = 0 ; i < m; i++) { for (int j = 0 ; j < n; j++) { int avg = 0 ; int numbers = 0 ; for (int k = 0 ; k < 3 ; k++) { for (int l = 0 ; l < 3 ; l++) { int r = i + neighbours[k]; int c = j + neighbours[l]; if ((r >= 0 && r < m) && (c >= 0 && c < n)){ avg += img[r][c]; numbers++; } } } ans[i][j] = avg/numbers; } } return ans; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Solution { public int [][] imageSmoother(int [][] img) { int m = img.length; int n = img[0 ].length; int [][] ans = new int [m][n]; for (int i = 0 ; i <= m - 1 ; i++){ for (int j = 0 ; j <= n - 1 ; j++){ ans[i][j] = count(i, j, img); } } return ans; } public int count (int a, int b, int [][] img) { int m = img.length; int n = img[0 ].length; int sum = 0 , number = 0 ; int x = 0 , y = 0 ; for (int i = -1 ; i <= 1 ; i++){ for (int j = -1 ; j<= 1 ; j++){ x = a + i; y = b + j; if (x >= 0 && x < m && y >= 0 && y < n){ sum += img[x][y]; number++; } } } return sum/number; } }
598. 区间加法 II - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 class Solution { public int maxCount (int m, int n, int [][] ops) { for (int [] op : ops){ m = Math.min(m, op[0 ]); n = Math.min(n, op[1 ]); } return m*n; } }
419. 甲板上的战舰 - 力扣(LeetCode)
横着或者竖着相连的 ‘X’ 的【一组】代表同一艘战舰。
水平战舰:如果一行中有连续的 ‘X’,它们构成了一艘战舰。
垂直战舰:如果一列中有连续的 ‘X’,它们也构成了一艘战舰。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Solution { public int countBattleships (char [][] board) { int m = board.length, n = board[0 ].length; int ans = 0 ; for (int i = 0 ; i < m; i++){ for (int j = 0 ; j < n; j++){ if (i > 0 && board[i - 1 ][j] == 'X' ) continue ; if (j > 0 && board[i][j - 1 ] == 'X' ) continue ; if (board[i][j] == 'X' ) ans++; } } return ans; } }
189. 轮转数组 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 class Solution { public void rotate (int [] nums, int k) { int n = nums.length; int [] newArr = new int [n]; for (int i = 0 ; i < n; i++) newArr[(i + k) % n] = nums[i]; System.arraycopy(newArr, 0 , nums, 0 , n); } }
396. 旋转函数 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public int maxRotateFunction (int [] nums) { int n = nums.length; int [] sum = new int [2 *n + 1 ]; for (int i = 1 ; i <= 2 *n; i++) sum[i] = sum[i - 1 ] + nums[(i - 1 )%n]; int ans = 0 ; for (int i = 0 ; i < n; i++) ans += i*nums[i]; int tmp = ans; for (int i = n + 1 ; i <= 2 *n; i++){ tmp += nums[(i - 1 ) % n]*(n - 1 ); tmp = tmp - (sum[i - 1 ] - sum[i - n]); ans = Math.max(ans, tmp); } return ans; } }