Skip to content

Commit 09c7200

Browse files
refactor 296
1 parent d93a5bf commit 09c7200

File tree

1 file changed

+17
-19
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+17
-19
lines changed

src/main/java/com/fishercoder/solutions/_296.java

+17-19
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,35 @@
66

77
public class _296 {
88
public static class Solution1 {
9+
/**
10+
* Credit: https://leetcode.com/problems/best-meeting-point/solution/ Approach 3
11+
*/
912
public int minTotalDistance(int[][] grid) {
1013
int m = grid.length;
1114
int n = grid[0].length;
12-
13-
List<Integer> I = new ArrayList(m);
14-
List<Integer> J = new ArrayList(n);
15-
15+
List<Integer> rows = new ArrayList<>();
16+
List<Integer> cols = new ArrayList<>();
1617
for (int i = 0; i < m; i++) {
1718
for (int j = 0; j < n; j++) {
1819
if (grid[i][j] == 1) {
19-
I.add(i);
20-
J.add(j);
20+
rows.add(i);
21+
cols.add(j);
2122
}
2223
}
2324
}
24-
25-
return getMin(I) + getMin(J);
25+
int rowMedian = rows.get(rows.size() / 2);
26+
Collections.sort(cols);
27+
int colMedian = cols.get(cols.size() / 2);
28+
return minDistance1D(rows, rowMedian) + minDistance1D(cols, colMedian);
2629
}
2730

28-
private int getMin(List<Integer> list) {
29-
int ret = 0;
30-
31-
Collections.sort(list);
32-
33-
int i = 0;
34-
int j = list.size() - 1;
35-
while (i < j) {
36-
ret += list.get(j--) - list.get(i++);
31+
private int minDistance1D(List<Integer> points, int median) {
32+
int distance = 0;
33+
for (int i : points) {
34+
distance += Math.abs(i - median);
3735
}
38-
39-
return ret;
36+
return distance;
4037
}
38+
4139
}
4240
}

0 commit comments

Comments
 (0)