
2025-07-06:判断网格图能否被切割成块。用go语言,给定一个大小为 n x n 的网格,坐标系的原点设在左下角。你有一个二维数组 rectangles,其中每个元素 rectangles[i] = [startx, starty, endx, endy] 表示一个矩形,其左下角坐标为 (startx, starty),右上角坐标为 (endx, endy)。已知这些矩形彼此不重叠。
任务是判断是否存在两条切割线,这两条线要么都是垂直线,要么都是水平线,将网格切割成三部分。要求:
如果满足条件,返回 true;否则返回 false。
3 <= n <= 1000000000。
3 <= rectangles.length <= 100000。
0 <= rectangles[i][0] < rectangles[i][2] <= n。
0 <= rectangles[i][1] < rectangles[i][3] <= n。
矩形之间两两不会有重叠。
输入:n = 5, rectangles = [[1,0,5,2],[0,2,2,4],[3,2,5,3],[0,4,4,5]]。
输出:true。
解释:

网格图如上所示,我们可以在 y = 2 和 y = 4 处进行水平切割,所以返回 true 。
题目来自力扣3394。
.
package main
import (
"fmt"
"slices"
)
type pair struct{ l, r int }
func check(intervals []pair)bool {
// 按照左端点从小到大排序
slices.SortFunc(intervals, func(a, b pair)int { return a.l - b.l })
cnt, maxR := 0, 0
for _, p := range intervals {
if p.l >= maxR { // 新区间
cnt++
}
maxR = max(maxR, p.r) // 更新右端点最大值
}
return cnt >= 3// 也可以在循环中提前退出
}
func checkValidCuts(_ int, rectangles [][]int)bool {
a := make([]pair, len(rectangles))
b := make([]pair, len(rectangles))
for i, rect := range rectangles {
a[i] = pair{rect[0], rect[2]}
b[i] = pair{rect[1], rect[3]}
}
return check(a) || check(b)
}
func main() {
n := 5
rectangles := [][]int{{1, 0, 5, 2}, {0, 2, 2, 4}, {3, 2, 5, 3}, {0, 4, 4, 5}}
result := checkValidCuts(n, rectangles)
fmt.Println(result)
}

# -*-coding:utf-8-*-
from typing import List
class Pair:
def __init__(self, l: int, r: int):
self.l = l
self.r = r
def check(intervals: List[Pair]) -> bool:
# 按左端点排序
intervals.sort(key=lambda x: x.l)
cnt = 0
max_r = 0
for p in intervals:
if p.l >= max_r:
cnt += 1
max_r = max(max_r, p.r)
return cnt >= 3
def check_valid_cuts(n: int, rectangles: List[List[int]]) -> bool:
a = [Pair(rect[0], rect[2]) for rect in rectangles]
b = [Pair(rect[1], rect[3]) for rect in rectangles]
return check(a) or check(b)
if __name__ == "__main__":
n = 5
rectangles = [[1, 0, 5, 2], [0, 2, 2, 4], [3, 2, 5, 3], [0, 4, 4, 5]]
result = check_valid_cuts(n, rectangles)
print(result) # True
我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。