From 987c6715a7a4c42dc4a2c21924b16fcec9e4c901 Mon Sep 17 00:00:00 2001 From: "huangge1199@hotmail.com" Date: Sun, 13 Jun 2021 00:15:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=2054=20=E5=9C=BA=E5=8F=8C=E5=91=A8?= =?UTF-8?q?=E8=B5=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/code/leet/doubleWeek/SolutionD54.java | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/main/java/com/code/leet/doubleWeek/SolutionD54.java diff --git a/src/main/java/com/code/leet/doubleWeek/SolutionD54.java b/src/main/java/com/code/leet/doubleWeek/SolutionD54.java new file mode 100644 index 0000000..c9f3ff3 --- /dev/null +++ b/src/main/java/com/code/leet/doubleWeek/SolutionD54.java @@ -0,0 +1,106 @@ +package com.code.leet.doubleWeek; + +public class SolutionD54 { + public static void main(String[] args) { + SolutionD54 solution = new SolutionD54(); +// System.out.println(solution.isCovered(new int[][]{{1, 2}, {3, 4}, {5, 6}}, 2, 5)); +// System.out.println(solution.chalkReplacer(new int[]{3, 4, 1, 2}, 25)); + System.out.println(solution.largestMagicSquare(new int[][]{{7, 1, 4, 5, 6}, {2, 5, 1, 6, 4}, {1, 5, 4, 3, 2}, {1, 2, 7, 3, 4}})); +// System.out.println(solution.largestMagicSquare(new int[][]{{8,1,6}, {3,5,7}, {4,9,2}, {7,10,9}})); + } + + public boolean isCovered(int[][] ranges, int left, int right) { + for (int i = left; i <= right; i++) { + boolean is = true; + for (int[] range : ranges) { + if (range[0] <= i && range[1] >= i) { + if (range[1] >= right) { + return true; + } + i = range[1]; + is = false; + break; + } + } + if (is) { + return false; + } + } + return false; + } + + public int chalkReplacer(int[] chalk, int k) { + int temp = k; + int length = chalk.length; + int[] free = new int[length]; + for (int i = 0; i < length; i++) { + if (i == 0) { + free[i] = chalk[i]; + } else { + free[i] += chalk[i] + free[i - 1]; + } + temp -= chalk[i]; + if (temp < 0) { + return i; + } + } + temp %= free[length - 1]; + if (temp == 0) { + return 0; + } + for (int i = 0; i < length; i++) { + temp -= chalk[i]; + if (temp < 0) { + return i; + } + } + return 0; + } + + public int largestMagicSquare(int[][] grid) { + int x = grid.length; + int y = grid[0].length; + int[][] xArr = new int[x][y + 1]; + for (int i = 0; i < x; i++) { + for (int j = 0; j < y; j++) { + xArr[i][j + 1] = xArr[i][j] + grid[i][j]; + } + } + int result = 1; + //下面的前2层for是y的范围 + for (int i = 0; i <= y; i++) { + for (int j = y; j > i + result; j--) { + int sum = xArr[0][j] - xArr[0][i]; + int count = j - i; + int temp = 1; + int index = 0; + //k + for (int k = 1; k < x; k++) { + if (xArr[k][j] - xArr[k][i] == sum) { + temp++; + } else { + sum = xArr[k][j] - xArr[k][i]; + temp = 1; + index = k; + } + if (temp == count) { + int x1 = 0; + int x2 = 0; + int m = 0; + for (int l = i; l < j; l++) { + x1 += grid[index + m][l]; + x2 += grid[k - m][l]; + } + if (sum == x1 && sum == x2) { + result = Math.max(result, count); + break; + } + index++; + temp--; + } + } + } + } + return result; + } +}