892.三维形体的表面积
分析
- 首先,一个柱体一个柱体的看,每个柱体是由:2 个底面(上表面/下表面)+ 所有的正方体都贡献了 4 个侧表面积。
- 然后,把柱体贴合在一起之后,需要把贴合的表面积给减掉,两个柱体贴合的表面积就是 两个柱体高的最小值*2。
class Solution {
public int surfaceArea(int[][] grid) {
if(grid == null || grid.length == 0) return 0;
int res = 0;
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid.length; j++) {
int area = grid[i][j];
if(area > 0) {
res += (area << 2) + 2;
if(i > 0) {
res -= (Math.min(area, grid[i - 1][j]) << 1);
}
if(j > 0) {
res -= (Math.min(area, grid[i][j - 1]) << 1);
}
}
}
}
return res;
}
}
812.最大三角形面积
分析
class Solution {
public double largestTriangleArea(int[][] points) {
double res = 0;
int len = points.length;
for(int i = 0; i < len - 2; i++) {
for(int j = i + 1; j < len - 1; j++) {
for(int k = j + 1; k < len; k++) {
res = Math.max(res, triangArea(points[i], points[j], points[k]));
}
}
}
return res;
}
public double triangArea(int[] a, int[] b, int[] c) {
return Math.abs(a[0] * b[1] + a[1] * c[0] + b[0] * c[1] - c[0] * b[1] - a[0] * c[1] - a[1] * b[0]) * 0.5;
}
}