Skip to content

Commit f66dc4e

Browse files
committed
386
1 parent 7fa1f6d commit f66dc4e

14 files changed

+662
-374
lines changed

README.md

+387-374
Large diffs are not rendered by default.

binary-watch.cc

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Binary Watch
2+
class Solution {
3+
public:
4+
vector<string> readBinaryWatch(int num) {
5+
vector<string> r;
6+
for (int i = 0; i < 12; i++)
7+
for (int j = 0; j < 60; j++)
8+
if (__builtin_popcount(i)+__builtin_popcount(j) == num) {
9+
char buf[6];
10+
sprintf(buf, "%d:%02d", i, j);
11+
r.push_back(buf);
12+
}
13+
return r;
14+
}
15+
};

decode-string.cc

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Decode String
2+
class Solution {
3+
string f(int& i, string s) {
4+
int x = 0;
5+
string r;
6+
for (; i < s.size(); i++)
7+
if (unsigned(s[i]-'0') < 10)
8+
x = x*10+s[i]-'0';
9+
else if (s[i] == '[') {
10+
string t = f(++i, s);
11+
for (; x > 0; x--)
12+
r += t;
13+
} else if (s[i] == ']')
14+
break;
15+
else
16+
r += s[i];
17+
return r;
18+
}
19+
public:
20+
string decodeString(string s) {
21+
int i = 0;
22+
return f(i, s);
23+
}
24+
};

elimination-game.cc

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Elimination Game
2+
/*
3+
l(i) = 2*r(i/2)+1
4+
r(i) = 2*l(i/2)+i%2
5+
6+
=>
7+
8+
l(i) = 4*l(i/4) + (i%4 >= 2 ? 3 : 1) = 4*l(i/4) + (i%4 | 1)
9+
= (0x55555555 | i) & x
10+
where x is the largest 2^k-1 less than i
11+
*/
12+
class Solution {
13+
public:
14+
int lastRemaining(int n) {
15+
return ((0x55555555 | n) & (1u<<31-__builtin_clz(n))-1) + 1;
16+
}
17+
};

evaluate-division.cc

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Evaluate Division
2+
class Solution {
3+
unordered_map<string, vector<pair<string, double>>> adj;
4+
unordered_map<string, pair<int, double>> val;
5+
void dfs(string u, int b, double g) {
6+
if (val.count(u)) return;
7+
val[u] = {b, g};
8+
for (auto& x: adj[u])
9+
dfs(x.first, b, g*x.second);
10+
}
11+
public:
12+
vector<double> calcEquation(vector<pair<string, string>> equations, vector<double>& values, vector<pair<string, string>> queries) {
13+
int i = 0;
14+
for (auto& x: equations) {
15+
adj[x.first].emplace_back(x.second, values[i]);
16+
adj[x.second].emplace_back(x.first, 1.0/values[i]);
17+
i++;
18+
}
19+
i = 0;
20+
for (auto& x: adj)
21+
dfs(x.first, i++, 1);
22+
vector<double> r;
23+
for (auto& x: queries)
24+
if (! val.count(x.first) || ! val.count(x.second))
25+
r.push_back(-1);
26+
else {
27+
auto &u = val[x.first], &v = val[x.second];
28+
if (u.first != v.first)
29+
r.push_back(-1);
30+
else
31+
r.push_back(v.second/u.second);
32+
}
33+
return r;
34+
}
35+
};

frog-jump.cc

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Frog Jump
2+
class Solution {
3+
public:
4+
bool canCross(vector<int>& stones) {
5+
vector<unordered_set<int>> a(stones.size());
6+
a[0].insert(0);
7+
for (int i = 1; i < stones.size(); i++)
8+
for (int j = i-1; j >= 0 && stones[j]+j+1 >= stones[i]; j--) {
9+
int t = stones[i]-stones[j];
10+
if (a[j].count(t-1) || a[j].count(t) || a[j].count(j+1))
11+
a[i].insert(t);
12+
}
13+
return a.back().size();
14+
}
15+
};

integer-replacement.cc

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Integer Replacement
2+
class Solution {
3+
public:
4+
int integerReplacement(int n) {
5+
int r = 0;
6+
unsigned m = n;
7+
while (m > 3) {
8+
if (m%2 == 0)
9+
m >>= 1;
10+
else if (m&2)
11+
m++;
12+
else
13+
m--;
14+
r++;
15+
}
16+
return r+m-1;
17+
}
18+
};

is-subsequence.cc

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Is Subsequence
2+
class Solution {
3+
public:
4+
bool isSubsequence(string s, string t) {
5+
size_t i = 0;
6+
for (char c: t)
7+
if (i < s.size() && s[i] == c)
8+
i++;
9+
return i == s.size();
10+
}
11+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Longest Substring with At Least K Repeating Characters
2+
3+
/// O(n |alphabet|)
4+
5+
class Solution {
6+
public:
7+
int longestSubstring(string s, int k) {
8+
const int AB = 26;
9+
int r = 0, c[AB];
10+
for (int u = 1; u <= AB; u++) {
11+
fill_n(c, AB, 0);
12+
int unique = 0, geq_k = 0;
13+
for (int i = 0, j = 0; j < s.size(); ) {
14+
if (unique <= u) {
15+
int& c0 = c[s[j]-'a'];
16+
if (! c0)
17+
unique++;
18+
if (++c0 == k)
19+
geq_k++;
20+
j++;
21+
} else {
22+
int& c0 = c[s[i]-'a'];
23+
if (c0 == k)
24+
geq_k--;
25+
if (! --c0)
26+
unique--;
27+
i++;
28+
}
29+
if (unique == u && geq_k == u)
30+
r = max(r, j-i);
31+
}
32+
}
33+
return r;
34+
}
35+
};
36+
37+
/// O(n |alphabet|)
38+
39+
class Solution {
40+
static const int AB = 26;
41+
int f(const string& s, int l, int r, int k) {
42+
int ret = 0, c[AB] = {}, b = l;
43+
for (int i = l; i < r; i++)
44+
c[s[i]-'a']++;
45+
for (int i = l; i < r; i++)
46+
if (c[s[i]-'a'] < k) {
47+
if (b < i)
48+
ret = max(ret, f(s, b, i, k));
49+
b = i+1;
50+
}
51+
return b == l ? r-l : b < r ? max(ret, f(s, b, r, k)) : ret;
52+
}
53+
public:
54+
int longestSubstring(string s, int k) {
55+
return f(s, 0, s.size(), k);
56+
}
57+
};

nth-digit.cc

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Nth Digit
2+
class Solution {
3+
public:
4+
int findNthDigit(int n) {
5+
long d = 1, r = 1;
6+
for (n--; n >= 9*r*d; r *= 10)
7+
n -= 9*r*d++;
8+
r += n/d;
9+
for (d -= n%d+1; d--; )
10+
r /= 10;
11+
return r%10;
12+
}
13+
};

random-pick-index.cc

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Random Pick Index
2+
class Solution {
3+
vector<int> a;
4+
public:
5+
Solution(vector<int> nums) {
6+
a = nums;
7+
srand(time());
8+
}
9+
10+
int pick(int target) {
11+
int t = -1, r;
12+
for (int i = 0; i < a.size(); i++)
13+
if (target == a[i]) {
14+
int g = rand();
15+
if (g > t) {
16+
t = t;
17+
r = i;
18+
}
19+
}
20+
return r;
21+
}
22+
};

remove-k-digits.cc

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Remove K Digits
2+
class Solution {
3+
public:
4+
string removeKdigits(string num, int k) {
5+
string a;
6+
for (char c: num) {
7+
for (; k && a.size() && a.back() > c; k--)
8+
a.pop_back();
9+
if (a.size() || c != '0')
10+
a += c;
11+
}
12+
return k < a.size() ? a.substr(0, a.size()-k) : "0";
13+
}
14+
};

rotate-function.cc

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Rotate Function
2+
class Solution {
3+
public:
4+
int maxRotateFunction(vector<int>& A) {
5+
int s = 0, ss = 0, n = A.size(), r;
6+
for (int i = 0; i < n; i++)
7+
s += A[i], ss += i*A[i];
8+
r = ss;
9+
for (int i = 1; i < n; i++)
10+
r = max(r, ss += n*A[i-1]-s);
11+
return r;
12+
}
13+
};

utf-8-validation.cc

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// UTF-8 Validation
2+
class Solution {
3+
public:
4+
bool validUtf8(vector<int>& data) {
5+
int c = 0;
6+
for (int x: data)
7+
if (c) {
8+
if ((x >> 6) != 0b10)
9+
return false;
10+
c--;
11+
} else if ((x >> 5) == 0b110)
12+
c = 1;
13+
else if ((x >> 4) == 0b1110)
14+
c = 2;
15+
else if ((x >> 3) == 0b11110)
16+
c = 3;
17+
else if (x >> 7)
18+
return false;
19+
return ! c;
20+
}
21+
};

0 commit comments

Comments
 (0)