暑假算法7.26,Day25
几何。。有点费脑
第一题
class Solution {
public int projectionArea(int[][] grid) {
int len = grid.length;
int xy=0, xz=0, yz=0;
for(int i=0;i<len;i++){
int maxi = 0;
int maxj = 0;
for(int j=0;j<len;j++){
if(grid[i][j] != 0) xy += 1;
maxi = maxi > grid[i][j] ? maxi : grid[i][j];
maxj = maxj > grid[j][i] ? maxj : grid[j][i];
}
xz += maxi;
yz += maxj;
}
return xy+xz+yz;
}
}
第二题
class Solution {
public:
int minimumLines(vector<vector<int>>& s) {
if(s.size() == 1) return 0;
if(s.size() == 2) return 1;
sort(s.begin(), s.end());
int cnt = 1;
int n = s.size();
for (int i = 1; i < n - 1; i ++ )
{
long long dx = s[i][0], dy = s[i][1];
long long px = s[i - 1][0], py = s[i - 1][1];
long long rx = s[i + 1][0], ry = s[i + 1][1];
if((ry - dy) * (dx - px) != (dy - py) * (rx - dx)) cnt ++;
}
return cnt;
}
};
第三题
class Solution {
public:
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
if(p1 == p2 || p1 == p3 || p1 == p4 || p2 == p3 || p2 == p4 || p3 == p4) return false;
long long a = 0,b = 0,c = 0,a1 = 0,b1 = 0,c1 = 0;
a = pow(p1[0]-p2[0],2) + pow(p1[1]-p2[1],2);
a1 = pow(p3[0]-p4[0],2) + pow(p3[1]-p4[1],2);
b = pow(p1[0]-p3[0],2) + pow(p1[1]-p3[1],2);
b1 = pow(p2[0]-p4[0],2) + pow(p2[1]-p4[1],2);
c = pow(p1[0]-p4[0],2) + pow(p1[1]-p4[1],2);
c1 = pow(p2[0]-p3[0],2) + pow(p2[1]-p3[1],2);
if(a != a1 || b != b1 || c != c1){
return false;
} // 如果不返回false,已经证明为矩形
if(a != b && a != c && b != c){
return false;
} // 如果不返回false,已经证明为正方形
else {
return true;
}
}
};