From 2ffce0512f3342602d9e1b084553848e67797bf1 Mon Sep 17 00:00:00 2001 From: GY-code Date: Thu, 1 Sep 2022 21:07:04 +0800 Subject: [PATCH 1/4] =?UTF-8?q?Update=200337.=E6=89=93=E5=AE=B6=E5=8A=AB?= =?UTF-8?q?=E8=88=8DIII.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码问题,对偷家情况,上面分述部分正确,下面综合代码,对应孩子下标应该为0,即`int val1 = cur->val + left[0] + right[0];` --- problems/0337.打家劫舍III.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/problems/0337.打家劫舍III.md b/problems/0337.打家劫舍III.md index 20b458e9..295f19fe 100644 --- a/problems/0337.打家劫舍III.md +++ b/problems/0337.打家劫舍III.md @@ -191,7 +191,7 @@ public: vector left = robTree(cur->left); vector right = robTree(cur->right); // 偷cur,那么就不能偷左右节点。 - int val1 = cur->val + left[1] + right[1]; + int val1 = cur->val + left[0] + right[0]; // 不偷cur,那么可以偷也可以不偷左右节点,则取较大的情况 int val2 = max(left[0], left[1]) + max(right[0], right[1]); return {val2, val1}; From a605d75ec6d24efb68a03ff7e669de937d6a5891 Mon Sep 17 00:00:00 2001 From: SwaggyP <1352164869@qq.com> Date: Sat, 3 Sep 2022 10:52:35 +0800 Subject: [PATCH 2/4] =?UTF-8?q?0463.=E5=B2=9B=E5=B1=BF=E7=9A=84=E5=91=A8?= =?UTF-8?q?=E9=95=BF=E5=A2=9E=E5=8A=A0go=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0463.岛屿的周长增加go解法 --- problems/0463.岛屿的周长.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/problems/0463.岛屿的周长.md b/problems/0463.岛屿的周长.md index 3dc69f20..a881cd7c 100644 --- a/problems/0463.岛屿的周长.md +++ b/problems/0463.岛屿的周长.md @@ -179,6 +179,25 @@ class Solution: ``` Go: +```go +func islandPerimeter(grid [][]int) int { + m, n := len(grid), len(grid[0]) + res := 0 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if grid[i][j] == 1 { + res += 4 + // 上下左右四个方向 + if i > 0 && grid[i-1][j] == 1 {res--} // 上边有岛屿 + if i < m-1 && grid[i+1][j] == 1 {res--} // 下边有岛屿 + if j > 0 && grid[i][j-1] == 1 {res--} // 左边有岛屿 + if j < n-1 && grid[i][j+1] == 1 {res--} // 右边有岛屿 + } + } + } + return res +} +``` JavaScript: ```javascript From 89ac882f24a38f1932e9cbb7ad5e8fe0fea21820 Mon Sep 17 00:00:00 2001 From: zhicheng lee <904688436@qq.com> Date: Sat, 3 Sep 2022 23:48:02 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=200452.=E7=94=A8?= =?UTF-8?q?=E6=9C=80=E5=B0=91=E6=95=B0=E9=87=8F=E7=9A=84=E7=AE=AD=E5=BC=95?= =?UTF-8?q?=E7=88=86=E6=B0=94=E7=90=83.md=20Java=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原Java代码错误,提示Line 29: error: reached end of file while parsing 且代码内容较为冗余 --- .../0452.用最少数量的箭引爆气球.md | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/problems/0452.用最少数量的箭引爆气球.md b/problems/0452.用最少数量的箭引爆气球.md index c571a235..91e340be 100644 --- a/problems/0452.用最少数量的箭引爆气球.md +++ b/problems/0452.用最少数量的箭引爆气球.md @@ -137,29 +137,21 @@ public: ### Java ```java /** -时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度 - -空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间 -*/ + * 时间复杂度 : O(NlogN) 排序需要 O(NlogN) 的复杂度 + * 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间 + */ class Solution { public int findMinArrowShots(int[][] points) { - if (points.length == 0) return 0; - //用x[0] - y[0] 会大于2147483647 造成整型溢出 - Arrays.sort(points, (x, y) -> Integer.compare(x[0], y[0])); - //count = 1 因为最少需要一个箭来射击第一个气球 - int count = 1; - //重叠气球的最小右边界 - int leftmostRightBound = points[0][1]; + // 根据气球直径的开始坐标从小到大排序 + // 使用Integer内置比较方法,不会溢出 + Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0])); + + int count = 1; // points 不为空至少需要一支箭 for (int i = 1; i < points.length; i++) { - //如果下一个气球的左边界大于最小右边界 - for(int i = 1; i < points.length; i++){ - if (points[i][0] > leftmostRightBound ) { - //增加一次射击 - count++; - leftmostRightBound = points[i][1]; - //不然就更新最小右边界 - } else { - leftmostRightBound = Math.min(leftmostRightBound , points[i][1]); + if (points[i][0] > points[i - 1][1]) { // 气球i和气球i-1不挨着,注意这里不是>= + count++; // 需要一支箭 + } else { // 气球i和气球i-1挨着 + points[i][1] = Math.min(points[i][1], points[i - 1][1]); // 更新重叠气球最小右边界 } } return count; From d0d693ffae17369a54a99cd5040f904037b3b78a Mon Sep 17 00:00:00 2001 From: SwaggyP <1352164869@qq.com> Date: Sun, 4 Sep 2022 10:21:43 +0800 Subject: [PATCH 4/4] =?UTF-8?q?1356.=20=E6=A0=B9=E6=8D=AE=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E4=BA=8C=E8=BF=9B=E5=88=B6=E4=B8=8B=201=20=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E7=9B=AE=E6=8E=92=E5=BA=8F=20=E5=A2=9E=E5=8A=A0go?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E7=9A=84=E8=A7=A3=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1356. 根据数字二进制下 1 的数目排序 增加go语言的解法 --- ...据数字二进制下1的数目排序.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/problems/1356.根据数字二进制下1的数目排序.md b/problems/1356.根据数字二进制下1的数目排序.md index 5ca73607..e97748cb 100644 --- a/problems/1356.根据数字二进制下1的数目排序.md +++ b/problems/1356.根据数字二进制下1的数目排序.md @@ -170,6 +170,39 @@ class Solution: ## Go ```go +func sortByBits(arr []int) []int { + var tmp int + for i := 0; i < len(arr); i++ { + for j := i+1; j < len(arr); j++ { + // 冒泡排序的手法,但是排序的规则从比大小变成了比位运算1的个数 + if isCmp(arr[i], arr[j]) { + tmp = arr[i] + arr[i] = arr[j] + arr[j] = tmp + } + } + } + return arr +} + +func isCmp(a, b int) bool { + bitA := bitCount(a) + bitB := bitCount(b) + if bitA == bitB { + return a > b + } else { + return bitA > bitB + } +} + +func bitCount(n int) int { + count := 0 + for n != 0 { + n &= (n-1) // 清除最低位的1 + count++ + } + return count +} ``` ## JavaScript