223. Rectangle Area
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int r1_x = abs(A - C);
int r2_x = abs(E - G);
int CE = abs(C - E);
int AG = abs(A - G);
int min_x = min(min(min(AG, CE), r1_x), r2_x);
int max_x = max(AG, CE);
int overlap_x = max_x > r1_x + r2_x ? 0:min_x;
int r1_y = abs(B - D);
int r2_y = abs(F - H);
int BH = abs(B - H);
int DF = abs(D - F);
int min_y = min(min(min(BH, DF), r1_y), r2_y);
int max_y = max(BH, DF);
int overlap_y = max_y > r1_y + r2_y ? 0:min_y;
int b_x = A > E? A: E;
int b_y = B > F? B: F;
int t_x = C > G? G: C;
int t_y = D > H? H: D;
int area_1 = abs(A - C)*abs(B - D);
int area_2 = abs(E - G)*abs(F - H);
int over_lap = overlap_x*overlap_y;
cout << area_1 << " " << area_2 << " " << over_lap << endl;
return area_1 + area_2 - over_lap;
}
};
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int area1 = (C-A)*(D-B), area2 = (G-E)*(H-F);
int coverX = C < E ? 0 : C < G ? A < E ? C-E : C-A : A > G ? 0 : A < E ? G-E : G-A;
int coverY = D < F ? 0 : D < H ? B < F ? D-F : D-B : B > H ? 0 : B < F ? H-F : H-B;
return area1 + area2 - coverX * coverY;
}
};
204. Count Primes
超时的做法。
class Solution {
public:
bool isPrime(int num) {
for(int i = 2; i <= sqrt(num); i++) {
if(num%i == 0)
return false;
}
return true;
}
int countPrimes(int n) {
int count = 0;
for(int i = 2; i < n; i++)
if(isPrime(i))
count++;
return count;
}
};
击败80%以上的算法(暴力破解):
class Solution {
public:
int countPrimes(int n) {
vector<int> rel(n, 1);
int count = 0;
for(int i = 2; i < n; i++) {
count += rel[i];
if(rel[i] == 1)
for(int j = i << 1; j < n; j += i)
rel[j] = 0;
}
return count;
}
};