leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE | |
commit | ff69f22747db5464711d5a3e8f8184a9fbe189c4 |
parent | e5acd3a1f703f9796029c62d754d875c27b92ae1 |
author | Dimitrije Dobrota <mail@dimitrijedobrota.com> |
date | Thu, 24 Aug 2023 13:21:02 +0200 |
5 Random Problems
Diffstat:A | Problems/0885.cpp | | | ++++++++++++++++++++++ |
A | Problems/1325.cpp | | | ++++++++++++++++++++++++++++++++ |
A | Problems/1418.cpp | | | ++++++++++++++++++++++++++++++++++ |
A | Problems/1448.cpp | | | ++++++++++++++++++++++ |
A | Problems/2023.cpp | | | +++++++++++++++ |
M | README.md | | | +++++ |
6 files changed, 130 insertions(+), 0 deletions(-)
diff --git a/Problems/0885.cpp b/Problems/0885.cpp
@@ -0,0 +1,22 @@
class Solution {
public:
vector<vector<int>> spiralMatrixIII(const int rows, const int cols, int x,
int y) {
static const int8_t offset_x[4] = {0, 1, 0, -1};
static const int8_t offset_y[4] = {1, 0, -1, 0};
vector<vector<int>> res;
res.reserve(rows * cols);
int dir = 0, cnt = 1, len = 1;
while (res.size() < rows * cols) {
for (int i = 0; i < len; i++) {
if (x >= 0 && x < rows && y >= 0 && y < cols) res.push_back({x, y});
x += offset_x[dir], y += offset_y[dir];
}
len += dir & 1;
dir = (dir + 1) & 0x3;
}
return res;
}
};
diff --git a/Problems/1325.cpp b/Problems/1325.cpp
@@ -0,0 +1,32 @@
class Solution {
public:
TreeNode *removeLeafNodes(TreeNode *root, int target) {
TreeNode dummy(-1, root, nullptr);
unordered_map<TreeNode *, TreeNode *> um = {
{root, &dummy}
};
stack<TreeNode *> st({root});
while (!st.empty()) {
TreeNode *root = st.top();
if (root->val < 0) {
st.pop();
root->val = -root->val;
if (!root->left && !root->right && root->val == target) {
TreeNode *parent = um[root];
(parent->left == root ? parent->left : parent->right) = nullptr;
}
continue;
}
root->val = -root->val;
if (root->left) {
um[root->left] = root;
st.push(root->left);
}
if (root->right) {
um[root->right] = root;
st.push(root->right);
}
}
return dummy.left;
}
};
diff --git a/Problems/1418.cpp b/Problems/1418.cpp
@@ -0,0 +1,34 @@
class Solution {
public:
vector<vector<string>> displayTable(vector<vector<string>> &orders) {
map<int, vector<string>> tables;
vector<vector<string>> res;
set<string> foods;
for (const auto &order : orders) {
tables[stoi(order[1])].push_back(order[2]);
foods.insert(order[2]);
}
unordered_map<string, int> pos;
int j = 1;
res.push_back({{"Table"}});
for (auto &food : foods) {
res[0].push_back(food);
pos[food] = j++;
}
for (auto &[table, foods] : tables) {
vector<int> row(res[0].size(), 0);
vector<string> rows;
rows.reserve(res[0].size());
for (const auto &food : foods) row[pos[food]]++;
row[0] = table;
for (int r : row) rows.push_back(to_string(r));
res.push_back(rows);
}
return res;
}
};
diff --git a/Problems/1448.cpp b/Problems/1448.cpp
@@ -0,0 +1,22 @@
class Solution {
public:
int goodNodes(TreeNode *root) {
queue<pair<TreeNode *, int>> q({
{root, INT_MIN}
});
int res = 0;
while (!q.empty()) {
const auto [root, maxi] = q.front();
q.pop();
if (root->val >= maxi) res++;
if (root->left) q.push({root->left, max(maxi, root->val)});
if (root->right) q.push({root->right, max(maxi, root->val)});
// For some reason it increases runtime and decreases memory usage
// Must be leetcode error...
root->left = root->right = nullptr;
}
return res;
}
};
diff --git a/Problems/2023.cpp b/Problems/2023.cpp
@@ -0,0 +1,15 @@
class Solution {
public:
int numOfPairs(const vector<string> &nums, const string target) {
unordered_map<string, int> um;
for (const auto &s : nums) um[s]++;
int res = 0;
for (int i = 0; i < target.size(); i++) {
const string s1 = target.substr(0, i);
const string s2 = target.substr(i);
res += (s1 != s2) ? um[s1] * um[s2] : um[s1] * (um[s1] - 1);
}
return res;
}
};
diff --git a/README.md b/README.md
@@ -392,6 +392,7 @@ for solving problems.
| 0879 | Hard | [Profitable Schemes](Problems/0879.cpp) |
| 0881 | Medium | [Boats to Save People](Problems/0881.cpp) |
| 0884 | Easy | [Uncommon Words from Two Sentences](Problems/0884.cpp) |
| 0885 | Medium | [Spiral Matrix III](Problems/0885.cpp) |
| 0886 | Medium | [Possible Bipartition](Problems/0886.cpp) |
| 0890 | Medium | [Find and Replace Pattern](Problems/0890.cpp) |
| 0894 | Medium | [All Possible Full Binary Trees](Problems/0894.cpp) |
@@ -482,6 +483,7 @@ for solving problems.
| 1318 | Medium | [Minimum Flips to Make a OR b Equal to c](Problems/1318.cpp) |
| 1319 | Medium | [Number of Operations to Make Network Connected](Problems/1319.cpp) |
| 1323 | Easy | [Maximum 69 Number](Problems/1323.cpp) |
| 1325 | Medium | [Delete Leaves With a Given Value](Problems/1325.cpp) |
| 1329 | Medium | [Sort the Matrix Diagonally](Problems/1329.cpp) |
| 1334 | Medium | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](Problems/1334.cpp) |
| 1337 | Easy | [The K Weakest Rows in a Matrix](Problems/1337.cpp) |
@@ -504,6 +506,7 @@ for solving problems.
| 1406 | Hard | [Stone Game III](Problems/1406.cpp) |
| 1409 | Medium | [Queries on a Permutation With Key](Problems/1409.cpp) |
| 1416 | Hard | [Restore The Array](Problems/1416.cpp) |
| 1418 | Medium | [Display Table of Food Orders in a Restaurant](Problems/1418.cpp) |
| 1425 | Hard | [Constrained Subsequence Sum](Problems/1425.cpp) |
| 1431 | Easy | [Kids With the Greatest Number of Candies](Problems/1431.cpp) |
| 1436 | Easy | [Destination City](Problems/1436.cpp) |
@@ -511,6 +514,7 @@ for solving problems.
| 1442 | Medium | [Count Triplets That Can Form Two Arrays of Equal XOR](Problems/1442.cpp) |
| 1443 | Medium | [Minimum Time to Collect All Apples in a Tree](Problems/1443.cpp) |
| 1444 | Hard | [Number of Ways of Cutting a Pizza](Problems/1444.cpp) |
| 1448 | Medium | [Count Good Nodes in Binary Tree](Problems/1448.cpp) |
| 1456 | Medium | [Maximum Number of Vowels in a Substring of Given Length](Problems/1456.cpp) |
| 1462 | Medium | [Course Schedule IV](Problems/1462.cpp) |
| 1466 | Medium | [Reorder Routes to Make All Paths Lead to the City Zero](Problems/1466.cpp) |
@@ -586,6 +590,7 @@ for solving problems.
| 1971 | Easy | [Find if Path Exists in Graph](Problems/1971.cpp) |
| 1976 | Medium | [Number of Ways to Arrive at Destination](Problems/1976.cpp) |
| 1991 | Easy | [Find the Middle Index in Array](Problems/1991.cpp) |
| 2023 | Medium | [Number of Pairs of Strings With Concatenation Equal to Target](Problems/2023.cpp) |
| 2024 | Medium | [Maximize the Confusion of an Exam](Problems/2024.cpp) |
| 2039 | Medium | [The Time When the Network Becomes Idle](Problems/2039.cpp) |
| 2044 | Medium | [Count Number of Maximum Bitwise-OR Subsets](Problems/2044.cpp) |