From f2064cbc4557b01aafd82eb52173c8a86137ba43 Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Wed, 12 Feb 2020 01:20:09 +0800 Subject: [PATCH] add q1277 --- .idea/workspace.xml | 82 +++++++++++++++++++++-------------------- Rocket.md | 2 +- src/q1277/Solution.java | 37 +++++++++++++++++++ 3 files changed, 81 insertions(+), 40 deletions(-) create mode 100644 src/q1277/Solution.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7e0d8f4..f51d5d1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,14 +1,10 @@ - - - - - - - + + + - + - - @@ -222,7 +218,7 @@ - + 1580045439607 @@ -315,7 +311,14 @@ - @@ -335,7 +338,8 @@ - @@ -350,62 +354,62 @@ - + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + diff --git a/Rocket.md b/Rocket.md index 56161c0..3c70419 100644 --- a/Rocket.md +++ b/Rocket.md @@ -507,7 +507,7 @@ TCP是一个双向通信协议,通信双方都有能力发送信息,并接 (2)选择排序:选择排序与冒泡排序有点像,只不过选择排序每次都是在确定了最小数的下标之后再进行交换,大大减少了交换的次数 (3)插入排序:将一个记录插入到已排序的有序表中,从而得到一个新的,记录数增1的有序表 (4)快速排序:通过一趟排序将序列分成左右两部分,其中左半部分的的值均比右半部分的值小,然后再分别对左右部分的记录进行排序,直到整个序列有序。 -```c +``` int partition(int a[], int low, int high){ int key = a[low]; while( low < high ){ diff --git a/src/q1277/Solution.java b/src/q1277/Solution.java new file mode 100644 index 0000000..60c5411 --- /dev/null +++ b/src/q1277/Solution.java @@ -0,0 +1,37 @@ +package q1277; + +/** + * 动态规划 dp[i][j]表示 matrix[i][j] 这个点可以往左上构造的最大正方形的边长 o(n^2) + */ +public class Solution { + public int countSquares(int[][] matrix) { + if (matrix.length < 1) { + return 0; + } + int m = matrix.length; + int n = matrix[0].length; + + int[][] dp = new int[m][n]; + + int rs = 0; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (matrix[i][j] == 0) { + dp[i][j] = 0; + } else { + if (i > 0 && j > 0) { + dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1; + } else { + dp[i][j] = 1; + } + rs += dp[i][j]; + } + } + } + return rs; + } + + public static void main(String[] args) { + new Solution().countSquares(new int[][]{{0, 1, 1, 1}, {1, 1, 1, 1}, {0, 1, 1, 1}}); + } +}