Skip to content

Commit 168713b

Browse files
solutions 3195, 3197
1 parent 1a1bbb1 commit 168713b

File tree

5 files changed

+181
-0
lines changed

5 files changed

+181
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
public class Solution {
2+
public int MinimumArea(int[][] grid) {
3+
int m = grid.Length, n = grid[0].Length;
4+
int x1 = m, y1 = n;
5+
int x2 = 0, y2 = 0;
6+
7+
for (int i = 0; i < m; ++i) {
8+
for (int j = 0; j < n; ++j) {
9+
if (grid[i][j] == 1) {
10+
x1 = Math.Min(x1, i);
11+
y1 = Math.Min(y1, j);
12+
x2 = Math.Max(x2, i);
13+
y2 = Math.Max(y2, j);
14+
}
15+
}
16+
}
17+
18+
return (x2 - x1 + 1) * (y2 - y1 + 1);
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number}
4+
*/
5+
var minimumArea = function (grid) {
6+
const [m, n] = [grid.length, grid[0].length];
7+
let [x1, y1] = [m, n];
8+
let [x2, y2] = [0, 0];
9+
for (let i = 0; i < m; ++i) {
10+
for (let j = 0; j < n; ++j) {
11+
if (grid[i][j] === 1) {
12+
x1 = Math.min(x1, i);
13+
y1 = Math.min(y1, j);
14+
x2 = Math.max(x2, i);
15+
y2 = Math.max(y2, j);
16+
}
17+
}
18+
}
19+
return (x2 - x1 + 1) * (y2 - y1 + 1);
20+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
impl Solution {
2+
pub fn minimum_area(grid: Vec<Vec<i32>>) -> i32 {
3+
let m = grid.len();
4+
let n = grid[0].len();
5+
let mut x1 = m as i32;
6+
let mut y1 = n as i32;
7+
let mut x2 = 0i32;
8+
let mut y2 = 0i32;
9+
10+
for i in 0..m {
11+
for j in 0..n {
12+
if grid[i][j] == 1 {
13+
x1 = x1.min(i as i32);
14+
y1 = y1.min(j as i32);
15+
x2 = x2.max(i as i32);
16+
y2 = y2.max(j as i32);
17+
}
18+
}
19+
}
20+
21+
(x2 - x1 + 1) * (y2 - y1 + 1)
22+
}
23+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* @param {number[][]} grid
3+
* @return {number}
4+
*/
5+
var minimumSum = function (grid) {
6+
const m = grid.length;
7+
const n = grid[0].length;
8+
let ans = m * n;
9+
const inf = Number.MAX_SAFE_INTEGER;
10+
const f = (i1, j1, i2, j2) => {
11+
let [x1, y1] = [inf, inf];
12+
let [x2, y2] = [-inf, -inf];
13+
for (let i = i1; i <= i2; i++) {
14+
for (let j = j1; j <= j2; j++) {
15+
if (grid[i][j] === 1) {
16+
x1 = Math.min(x1, i);
17+
y1 = Math.min(y1, j);
18+
x2 = Math.max(x2, i);
19+
y2 = Math.max(y2, j);
20+
}
21+
}
22+
}
23+
return x1 === inf ? 0 : (x2 - x1 + 1) * (y2 - y1 + 1);
24+
};
25+
26+
for (let i1 = 0; i1 < m - 1; i1++) {
27+
for (let i2 = i1 + 1; i2 < m - 1; i2++) {
28+
ans = Math.min(
29+
ans,
30+
f(0, 0, i1, n - 1) + f(i1 + 1, 0, i2, n - 1) + f(i2 + 1, 0, m - 1, n - 1),
31+
);
32+
}
33+
}
34+
35+
for (let j1 = 0; j1 < n - 1; j1++) {
36+
for (let j2 = j1 + 1; j2 < n - 1; j2++) {
37+
ans = Math.min(
38+
ans,
39+
f(0, 0, m - 1, j1) + f(0, j1 + 1, m - 1, j2) + f(0, j2 + 1, m - 1, n - 1),
40+
);
41+
}
42+
}
43+
44+
for (let i = 0; i < m - 1; i++) {
45+
for (let j = 0; j < n - 1; j++) {
46+
ans = Math.min(ans, f(0, 0, i, j) + f(0, j + 1, i, n - 1) + f(i + 1, 0, m - 1, n - 1));
47+
ans = Math.min(
48+
ans,
49+
f(0, 0, i, n - 1) + f(i + 1, 0, m - 1, j) + f(i + 1, j + 1, m - 1, n - 1),
50+
);
51+
ans = Math.min(ans, f(0, 0, i, j) + f(i + 1, 0, m - 1, j) + f(0, j + 1, m - 1, n - 1));
52+
ans = Math.min(
53+
ans,
54+
f(0, 0, m - 1, j) + f(0, j + 1, i, n - 1) + f(i + 1, j + 1, m - 1, n - 1),
55+
);
56+
}
57+
}
58+
59+
return ans;
60+
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
impl Solution {
2+
pub fn minimum_sum(grid: Vec<Vec<i32>>) -> i32 {
3+
let m = grid.len();
4+
let n = grid[0].len();
5+
let mut ans = (m * n) as i32;
6+
let inf = i32::MAX / 4;
7+
8+
let f = |i1: usize, j1: usize, i2: usize, j2: usize| -> i32 {
9+
let mut x1 = inf;
10+
let mut y1 = inf;
11+
let mut x2 = -inf;
12+
let mut y2 = -inf;
13+
14+
for i in i1..=i2 {
15+
for j in j1..=j2 {
16+
if grid[i][j] == 1 {
17+
x1 = x1.min(i as i32);
18+
y1 = y1.min(j as i32);
19+
x2 = x2.max(i as i32);
20+
y2 = y2.max(j as i32);
21+
}
22+
}
23+
}
24+
if x1 > x2 || y1 > y2 {
25+
inf
26+
} else {
27+
(x2 - x1 + 1) * (y2 - y1 + 1)
28+
}
29+
};
30+
31+
for i1 in 0..m - 1 {
32+
for i2 in i1 + 1..m - 1 {
33+
ans = ans
34+
.min(f(0, 0, i1, n - 1) + f(i1 + 1, 0, i2, n - 1) + f(i2 + 1, 0, m - 1, n - 1));
35+
}
36+
}
37+
38+
for j1 in 0..n - 1 {
39+
for j2 in j1 + 1..n - 1 {
40+
ans = ans
41+
.min(f(0, 0, m - 1, j1) + f(0, j1 + 1, m - 1, j2) + f(0, j2 + 1, m - 1, n - 1));
42+
}
43+
}
44+
45+
for i in 0..m - 1 {
46+
for j in 0..n - 1 {
47+
ans = ans.min(f(0, 0, i, j) + f(0, j + 1, i, n - 1) + f(i + 1, 0, m - 1, n - 1));
48+
ans = ans
49+
.min(f(0, 0, i, n - 1) + f(i + 1, 0, m - 1, j) + f(i + 1, j + 1, m - 1, n - 1));
50+
ans = ans.min(f(0, 0, i, j) + f(i + 1, 0, m - 1, j) + f(0, j + 1, m - 1, n - 1));
51+
ans = ans
52+
.min(f(0, 0, m - 1, j) + f(0, j + 1, i, n - 1) + f(i + 1, j + 1, m - 1, n - 1));
53+
}
54+
}
55+
56+
ans
57+
}
58+
}

0 commit comments

Comments
 (0)