Skip to content

Commit e22be69

Browse files
committed
515/564 problems solved
1 parent 5442017 commit e22be69

12 files changed

+732
-427
lines changed

Diff for: README.md

+438-427
Large diffs are not rendered by default.

Diff for: source-code/Complex_Number_Multiplication.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
#define real first
3+
#define img second
4+
pair<int, int> tokenize(string const& s) {
5+
int plus = s.find('+');
6+
assert(plus != string::npos);
7+
int real = atoi(s.substr(0, plus).c_str());
8+
int img = atoi(s.substr(plus + 1, s.length() - plus - 2).c_str());
9+
return {real, img};
10+
}
11+
public:
12+
string complexNumberMultiply(string a, string b) {
13+
pair<int, int> complexA = tokenize(a);
14+
pair<int, int> complexB = tokenize(b);
15+
int real = complexA.real * complexB.real + complexA.img * complexB.img * (-1);
16+
int img = complexA.real * complexB.img + complexA.img * complexB.real;
17+
return to_string(real) + "+" + to_string(img) + "i";
18+
}
19+
};

Diff for: source-code/Friend_Circles.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
void dfs(int u, vector<vector<int>> const& M, vector<bool>& visited) {
3+
visited[u] = true;
4+
for(int i = 0; i < (int)M[u].size(); i++) {
5+
if(!M[u][i] or visited[i]) {
6+
continue;
7+
}
8+
dfs(i, M, visited);
9+
10+
}
11+
}
12+
public:
13+
int findCircleNum(vector<vector<int>>& M) {
14+
int n = (int)M.size();
15+
vector<bool> visited(n, false);
16+
int circle = 0;
17+
for(int i = 0; i < n; i++) {
18+
if(!visited[i]) {
19+
circle++;
20+
dfs(i, M, visited);
21+
}
22+
}
23+
return circle;
24+
}
25+
};

Diff for: source-code/Longest_Uncommon_Subsequence_I.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution {
2+
public:
3+
int findLUSlength(string a, string b) {
4+
return (a != b) ? (int)max(a.length(), b.length()) : -1;
5+
}
6+
};

Diff for: source-code/Longest_Uncommon_Subsequence_II.cpp

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
bool isSubseq(string const& s1, string const& s2) {
3+
if(s1.length() > s2.length()) {
4+
return false;
5+
}
6+
int j = 0;
7+
for(int i = 0; i < (int)s2.length() and j < (int)s1.length(); i++) {
8+
if(s2[i] == s1[j]) {
9+
j++;
10+
}
11+
}
12+
return j == (int)s1.length();
13+
}
14+
public:
15+
int findLUSlength(vector<string>& strs) {
16+
int result = -1;
17+
unordered_set<string> exist;
18+
for(int i = 0; i < (int)strs.size(); i++) {
19+
20+
// silly prune
21+
if(exist.find(strs[i]) != exist.end() or (int)strs[i].length() <= result) {
22+
continue;
23+
}
24+
25+
bool flag = true;
26+
for(int j = 0; j < (int)strs.size() and flag; j++) {
27+
if(i == j) continue;
28+
if(isSubseq(strs[i], strs[j])) {
29+
flag = false;
30+
}
31+
}
32+
exist.insert(strs[i]);
33+
if(flag) {
34+
result = max(result, (int)strs[i].length());
35+
}
36+
}
37+
return result;
38+
}
39+
};

Diff for: source-code/Next_Greater_Element_III.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public:
3+
int nextGreaterElement(int n) {
4+
string s = to_string(n);
5+
int m = (int)s.length();
6+
int k = m - 1;
7+
for(int i = m - 1; i > 0; i--) {
8+
if(s[i - 1] < s[i]) {
9+
k = i - 1;
10+
break;
11+
}
12+
}
13+
for(int i = m - 1; i > k; i--) {
14+
if(s[i] > s[k]) {
15+
swap(s[i], s[k]);
16+
break;
17+
}
18+
}
19+
reverse(s.begin() + k + 1, s.end());
20+
21+
long long result = 0LL;
22+
for(int i = 0; i < m; i++) {
23+
int digit = s[i] - '0';
24+
result *= 10;
25+
result += digit;
26+
}
27+
if((int)result == n or result < INT_MIN or result > INT_MAX) {
28+
return -1;
29+
}
30+
return (int)result;
31+
}
32+
};

Diff for: source-code/Perfect_Number.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool checkPerfectNumber(int num) {
4+
if(num == 1) return 0;
5+
int sum = 0;
6+
sum += 1;
7+
for(int i = 2; i <= sqrt(num); i++) {
8+
if(num % i == 0) {
9+
sum += i;
10+
sum += num / i;
11+
}
12+
}
13+
return num == sum;
14+
}
15+
};

Diff for: source-code/Reshape_the_Matrix.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
4+
int rows = (int)nums.size();
5+
int cols = (int)nums[0].size();
6+
if (r * c != rows * cols) {
7+
return nums;
8+
}
9+
vector<vector<int>> reshapedMatrix(r, vector<int>(c));
10+
for(int i = 0, x = 0, y = 0; i < rows; i++) {
11+
for(int j = 0; j < cols; j++) {
12+
reshapedMatrix[x][y++ % c] = nums[i][j];
13+
if(y % c == 0) {
14+
x++;
15+
}
16+
}
17+
}
18+
return reshapedMatrix;
19+
}
20+
};

Diff for: source-code/Reverse_Words_in_a_String_III.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
string reverseWords(string s) {
4+
int i = 0, left = 0;
5+
int n = (int)s.length();
6+
while(i < n) {
7+
if(s[i] == ' ' or s[i] == '\n') {
8+
reverse(s.begin() + left, s.begin() + i);
9+
left = i + 1;
10+
}
11+
i++;
12+
}
13+
reverse(s.begin() + left, s.end());
14+
return s;
15+
}
16+
};

Diff for: source-code/Student_Attendance_Record_I.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
bool checkRecord(string s) {
4+
int consLate = 0, late = 0, absent = 0;
5+
for(int i = 0; i < (int)s.length(); i++) {
6+
if(s[i] == 'A') {
7+
absent++;
8+
late = 0;
9+
} else if(s[i] == 'L') {
10+
late++;
11+
consLate = max(consLate, late);
12+
} else {
13+
late = 0;
14+
}
15+
}
16+
return consLate <= 2 and absent < 2;
17+
}
18+
};

Diff for: source-code/Student_Attendance_Record_II.cpp

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// TLE
2+
class Solution {
3+
const static int MOD = 1000000007;
4+
vector<int> fact;
5+
vector<int> ifact;
6+
7+
int power(int base, int exp, int mod) {
8+
if(exp == 0) return 1;
9+
int ret = power(base, exp / 2, mod) % mod;
10+
ret = 1LL * ret * ret % mod;
11+
if(exp & 1) {
12+
ret = 1LL * ret * base % mod;
13+
}
14+
return ret;
15+
}
16+
17+
int modInv(int base, int mod = MOD) {
18+
return power(base, mod - 2, mod);
19+
}
20+
21+
void init(int n) {
22+
fact = vector<int>(n + 1, 0);
23+
ifact = vector<int>(n + 1, 0);
24+
fact[0] = ifact[0] = 1;
25+
for(int i = 1; i <= n; i++) {
26+
fact[i] = 1LL * i * fact[i - 1] % MOD;
27+
ifact[i] = modInv(fact[i]);
28+
}
29+
}
30+
31+
int nCr(int n, int r) {
32+
if(r > n) return 0;
33+
int ans = fact[n];
34+
ans = 1LL * ans * ifact[r] % MOD;
35+
ans = 1LL * ans * ifact[n - r] % MOD;
36+
return ans;
37+
}
38+
public:
39+
int checkRecord(int n) {
40+
init(n + 1);
41+
int maxLate = n - (n / 3);
42+
int result = 0;
43+
for(int i = 0; i <= maxLate; i++) {
44+
int ways = 0;
45+
for(int k = (i / 2) + (i % 2), pair = i / 2; k <= i; k++, pair--) {
46+
ways = (ways + (1LL * nCr(n - i + 1, k) * nCr(k, pair)) % MOD) % MOD;
47+
}
48+
result = (result + ways) % MOD;
49+
result = (result + (1LL * ways * (n - i) % MOD)) % MOD;
50+
}
51+
return result;
52+
}
53+
};
54+
55+
// MLE
56+
class Solution {
57+
#define MOD 1000000007
58+
vector<vector<vector<int>>> dp;
59+
int n;
60+
61+
int solve(int i, int k, int taken) {
62+
if(i == n) {
63+
return (k == 0);
64+
}
65+
if(dp[i][k][taken] != -1) {
66+
return dp[i][k][taken];
67+
}
68+
if(taken == 2) {
69+
return dp[i][k][taken] = solve(i + 1, k, 0) % MOD;
70+
}
71+
72+
return dp[i][k][taken] = (solve(i + 1, k, 0) + (k > 0 ? solve(i + 1, k - 1, taken + 1) : 0)) % MOD;
73+
}
74+
75+
public:
76+
int checkRecord(int n) {
77+
this->n = n;
78+
int maxLate = n - (n / 3);
79+
dp= vector<vector<vector<int>>>(n, vector<vector<int>>(maxLate + 1, vector<int>(3, -1)));
80+
int result = 0;
81+
for(int i = 0; i <= maxLate; i++) {
82+
int cnt = solve(0, i, 0);
83+
result = (result + cnt) % MOD;
84+
result = (result + (1LL * cnt * (n - i) % MOD)) % MOD;
85+
}
86+
return result;
87+
}
88+
};

Diff for: source-code/Subarray_Sum_Equals_K.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int subarraySum(vector<int>& nums, int k) {
4+
unordered_map<int, int> freq;
5+
int n = (int)nums.size();
6+
int sum = 0;
7+
freq[sum]++;
8+
int cnt = 0;
9+
for(int i = 0; i < n; i++) {
10+
sum += nums[i];
11+
cnt += freq[sum - k];
12+
freq[sum]++;
13+
}
14+
return cnt;
15+
}
16+
};

0 commit comments

Comments
 (0)