Skip to content

Commit f7bc40d

Browse files
committed
2025.2.18
1 parent c3a745b commit f7bc40d

29 files changed

+609
-605
lines changed

cpp/.clang-format

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ IndentWidth: 4
33
---
44
Language: Cpp
55
# Force pointers to the type for C++.
6-
# AccessModifierOffset: -4
6+
AccessModifierOffset: -4
77
DerivePointerAlignment: false
88
PointerAlignment: Left

cpp/1.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution {
22
public:
3-
vector<int> twoSum(vector<int> &nums, int target) {
4-
unordered_map<int, int> map;
5-
for (int i = 0; i < nums.size(); ++i) {
6-
if (auto it = map.find(target - nums[i]); it != map.end())
7-
return {it->second, i};
8-
map[nums[i]] = i;
3+
vector<int> twoSum(vector<int>& nums, int target) {
4+
unordered_map<int, int> map;
5+
for (int i = 0; i < nums.size(); ++i) {
6+
if (auto it = map.find(target - nums[i]); it != map.end())
7+
return {it->second, i};
8+
map[nums[i]] = i;
9+
}
10+
return {};
911
}
10-
return {};
11-
}
1212
};

cpp/11.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class Solution { // 16ms
22
public:
3-
int maxArea(vector<int> &height) {
4-
int i = 0, j = height.size() - 1, result = 0;
5-
while (i < j) {
6-
result = max(result, min(height[i], height[j]) * (j - i));
7-
height[i] < height[j] ? ++i : --j;
3+
int maxArea(vector<int>& height) {
4+
int i = 0, j = height.size() - 1, result = 0;
5+
while (i < j) {
6+
result = max(result, min(height[i], height[j]) * (j - i));
7+
height[i] < height[j] ? ++i : --j;
8+
}
9+
return result;
810
}
9-
return result;
10-
}
1111
};

cpp/13.cpp

+23-21
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1-
// notExactlyRight.cpp
2-
class Solution { // wrong at "IIIVM"
1+
class Solution {
2+
static unordered_map<char, int> hash;
3+
34
public:
4-
int romanToInt(string s) {
5-
vector<int> st;
6-
unordered_map<char, int> hash = {{'I', 1}, {'V', 5}, {'X', 10},
7-
{'L', 50}, {'C', 100}, {'D', 500},
8-
{'M', 1000}};
9-
for (auto c : s) {
10-
auto n = hash[c];
11-
if (st.empty() || st.back() >= n) {
12-
st.push_back(n);
13-
} else {
14-
int res = 0;
15-
while (st.size() && st.back() < n) {
16-
res += st.back();
17-
st.pop_back();
5+
int romanToInt(string s) {
6+
vector<int> st;
7+
for (auto c : s) {
8+
auto n = hash[c];
9+
if (st.empty() || st.back() >= n) {
10+
st.push_back(n);
11+
} else {
12+
int res = 0;
13+
while (st.size() && st.back() < n) {
14+
res += st.back();
15+
st.pop_back();
16+
}
17+
n -= res;
18+
st.push_back(n);
19+
}
1820
}
19-
n -= res;
20-
st.push_back(n);
21-
}
21+
return accumulate(st.begin(), st.end(), 0);
2222
}
23-
return accumulate(st.begin(), st.end(), 0);
24-
}
2523
};
24+
25+
unordered_map<char, int> Solution::hash = {{'I', 1}, {'V', 5}, {'X', 10},
26+
{'L', 50}, {'C', 100}, {'D', 500},
27+
{'M', 1000}};

cpp/14.cpp

+3-19
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
1-
class Solution { // 4ms
2-
public:
3-
string longestCommonPrefix(vector<string> &strs) {
4-
if (strs.size() == 0 || strs[0].size() == 0)
5-
return "";
6-
string pre = "";
7-
for (int j = 0; j < strs[0].size(); ++j) {
8-
char ch = strs[0][j];
9-
for (int i = 1; i < strs.size(); ++i) {
10-
if (strs[i].size() <= j || strs[i][j] != ch)
11-
return pre;
12-
}
13-
pre += ch;
14-
}
15-
return pre;
16-
}
17-
};
18-
class Solution2 { // why this takes 0ms?
1+
class Solution {
192
public:
203
string longestCommonPrefix(vector<string>& strs) {
21-
if (strs.size() == 1) return strs[0];
4+
if (strs.size() == 1)
5+
return strs[0];
226
string ret;
237
for (int charN = 0; charN < strs[0].size(); ++charN) {
248
for (int wordN = 0; wordN < strs.size(); ++wordN) {

cpp/15.cpp

+38-35
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,55 @@
1-
class Solution { // sortAndDoublePointer 100ms
1+
class Solution { // sortAndDoublePointer
22
public:
3-
vector<vector<int>> threeSum(vector<int> &nums) {
4-
sort(nums.begin(), nums.end());
5-
int n = nums.size();
6-
vector<vector<int>> result;
7-
for (int i = 0; i < n - 2; ++i) {
8-
if (i > 0 && nums[i] == nums[i - 1])
9-
continue;
10-
for (int low = i + 1, high = n - 1; low < high;) {
11-
if (int sum = nums[low] + nums[high]; sum == -nums[i]) {
12-
result.push_back({nums[i], nums[low], nums[high]});
13-
do {
14-
++low;
15-
} while (low < high && nums[low - 1] == nums[low]);
16-
do {
17-
--high;
18-
} while (low < high && nums[high + 1] == nums[high]);
19-
} else if (sum > -nums[i])
20-
--high;
21-
else
22-
++low;
23-
}
3+
vector<vector<int>> threeSum(vector<int>& nums) {
4+
ranges::sort(nums);
5+
int n = nums.size();
6+
vector<vector<int>> result;
7+
for (int i = 0; i < n - 2; ++i) {
8+
if (i > 0 && nums[i] == nums[i - 1])
9+
continue;
10+
for (int low = i + 1, high = n - 1; low < high;) {
11+
if (int sum = nums[low] + nums[high]; sum == -nums[i]) {
12+
result.push_back({nums[i], nums[low], nums[high]});
13+
do {
14+
++low;
15+
} while (low < high && nums[low - 1] == nums[low]);
16+
do {
17+
--high;
18+
} while (low < high && nums[high + 1] == nums[high]);
19+
} else if (sum > -nums[i])
20+
--high;
21+
else
22+
++low;
23+
}
24+
}
25+
return result;
2426
}
25-
return result;
26-
}
2727
};
28-
class Solution2 { // same logic but 46ms
28+
class Solution2 { // same logic, but use lambda
2929
public:
3030
vector<vector<int>> threeSum(vector<int>& nums) {
3131
sort(nums.begin(), nums.end());
3232
vector<vector<int>> res;
33-
auto find = [&res](vector<int>& nums, int k){
33+
auto find = [&res](vector<int>& nums, int k) {
3434
int i = k + 1, j = nums.size() - 1;
35-
while(i<j){
36-
if(nums[i] + nums[j] +nums[k] == 0){
35+
while (i < j) {
36+
if (nums[i] + nums[j] + nums[k] == 0) {
3737
res.push_back({nums[k], nums[i], nums[j]});
38-
while(++i < j && nums[i-1] == nums[i]);
39-
while(--j > i && nums[j+1] == nums[j]);
40-
} else if (nums[i] + nums[j] +nums[k] > 0){
38+
while (++i < j && nums[i - 1] == nums[i])
39+
;
40+
while (--j > i && nums[j + 1] == nums[j])
41+
;
42+
} else if (nums[i] + nums[j] + nums[k] > 0) {
4143
--j;
42-
} else{
44+
} else {
4345
++i;
44-
}
46+
}
4547
}
4648
};
47-
for(int k=0;k<nums.size();){
49+
for (int k = 0; k < nums.size();) {
4850
find(nums, k);
49-
while(++k < nums.size() && nums[k-1] == nums[k]);
51+
while (++k < nums.size() && nums[k - 1] == nums[k])
52+
;
5053
}
5154
return res;
5255
}

cpp/16.cpp

+26-25
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,51 @@
11
// sort.cpp
22
class Solution {
33
public:
4-
int threeSumClosest(vector<int> &nums, int target) {
5-
sort(nums.begin(), nums.end());
6-
int t = 0x7fffffff, j, k, n = nums.size(), s;
7-
for (int i = 0; i < n; ++i) {
8-
s = target - nums[i];
9-
for (j = i + 1, k = n - 1; j < k;) {
10-
int sum = nums[j] + nums[k];
11-
if (abs(t) > abs(sum - s))
12-
t = sum - s;
13-
if (sum > s)
14-
k--;
15-
else if (sum < s)
16-
++j;
17-
else
18-
return target;
19-
}
4+
int threeSumClosest(vector<int>& nums, int target) {
5+
sort(nums.begin(), nums.end());
6+
int t = 0x7fffffff, j, k, n = nums.size(), s;
7+
for (int i = 0; i < n; ++i) {
8+
s = target - nums[i];
9+
for (j = i + 1, k = n - 1; j < k;) {
10+
int sum = nums[j] + nums[k];
11+
if (abs(t) > abs(sum - s))
12+
t = sum - s;
13+
if (sum > s)
14+
k--;
15+
else if (sum < s)
16+
++j;
17+
else
18+
return target;
19+
}
20+
}
21+
return target + t;
2022
}
21-
return target + t;
22-
}
2323
};
2424
class Solution2 {
2525
public:
2626
int threeSumClosest(vector<int> nums, int target) {
2727
sort(nums.begin(), nums.end());
2828
int ret = 1000000;
29-
auto find = [&ret, &target](vector<int>& nums, int k){
29+
auto find = [&ret, &target](vector<int>& nums, int k) {
3030
int i = k + 1, j = nums.size() - 1;
31-
while(i<j){
31+
while (i < j) {
3232
int sum = nums[i] + nums[j] + nums[k];
33-
if(abs(sum-target)<abs(ret-target)){
33+
if (abs(sum - target) < abs(ret - target)) {
3434
ret = sum;
3535
}
36-
if (sum > target){
36+
if (sum > target) {
3737
--j;
38-
} else if (sum < target){
38+
} else if (sum < target) {
3939
++i;
4040
} else {
4141
return;
4242
}
4343
}
4444
};
45-
for(int k=0;k<nums.size();++k){
45+
for (int k = 0; k < nums.size(); ++k) {
4646
find(nums, k);
47-
if(ret == target) return ret;
47+
if (ret == target)
48+
return ret;
4849
}
4950
return ret;
5051
}

cpp/17.cpp

+32-27
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,48 @@
11
// dfs.cpp
22
class Solution {
3+
static vector<string> letter;
4+
void dfs(vector<string>& letter, vector<string>& res, const string& digits,
5+
string cur, int i) {
6+
if (i == digits.size()) {
7+
res.push_back(cur);
8+
return;
9+
}
10+
for (int j = 0; j < letter[digits[i] - '0'].size(); ++j)
11+
dfs(letter, res, digits, cur + letter[digits[i] - '0'][j], i + 1);
12+
}
13+
314
public:
4-
vector<string> letterCombinations(string digits) {
5-
vector<string> letter = {"", "", "abc", "def", "ghi",
6-
"jkl", "mno", "pqrs", "tuv", "wxyz"};
7-
vector<string> res;
8-
if (digits.size() == 0)
9-
return res;
10-
dfs(letter, res, digits, "", 0);
11-
return res;
12-
}
13-
void dfs(vector<string> &letter, vector<string> &res, const string &digits,
14-
string cur, int i) {
15-
if (i == digits.size()) {
16-
res.push_back(cur);
17-
return;
15+
vector<string> letterCombinations(string digits) {
16+
vector<string> res;
17+
if (digits.size() == 0)
18+
return res;
19+
dfs(letter, res, digits, "", 0);
20+
return res;
1821
}
19-
for (int j = 0; j < letter[digits[i] - '0'].size(); ++j)
20-
dfs(letter, res, digits, cur + letter[digits[i] - '0'][j], i + 1);
21-
}
2222
};
23-
class Solution2 {
24-
vector<string> combine(vector<string> &a, vector<string> &b) {
23+
24+
vector<string> Solution::letter = {"", "", "abc", "def", "ghi",
25+
"jkl", "mno", "pqrs", "tuv", "wxyz"};
26+
27+
string keymap[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
28+
class Solution {
29+
vector<string> combine(vector<string>& a, string& b) {
2530
vector<string> res;
26-
for (auto &i : a) {
27-
for (auto &j : b) {
31+
for (auto& i : a) {
32+
for (auto& j : b) {
2833
res.push_back(i + j);
2934
}
3035
}
3136
return res;
3237
}
38+
3339
public:
3440
vector<string> letterCombinations(string digits) {
35-
if (digits.empty()) return {};
36-
vector<string> res;
37-
string[] map = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
38-
res.push_back("");
39-
for (auto &d : digits) {
40-
res = combine(res, map[d - '2']);
41+
if (digits.empty())
42+
return {};
43+
vector<string> res = {""};
44+
for (auto& d : digits) {
45+
res = combine(res, keymap[d - '2']);
4146
}
4247
return res;
4348
}

0 commit comments

Comments
 (0)