Skip to content

Commit d8638ea

Browse files
committed
1.10 problems solved.
1 parent 7c6b486 commit d8638ea

File tree

10 files changed

+362
-0
lines changed

10 files changed

+362
-0
lines changed

122.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
int maxProfit(vector<int>& prices) {
2+
int len = prices.size();
3+
if (len <= 1)
4+
return 0;
5+
int pr = prices[0];
6+
int profit = 0;
7+
int i = 1;
8+
while (i < len)
9+
{
10+
if (prices[i] <= pr)
11+
{
12+
pr = prices[i];
13+
++i;
14+
}
15+
else
16+
{
17+
while (i + 1 < len && prices[i + 1] >= prices[i])
18+
++i;
19+
profit += prices[i]-pr;
20+
if (i >= len - 2)
21+
break;
22+
else
23+
{
24+
pr = prices[i + 1];
25+
i += 2;
26+
}
27+
}
28+
}
29+
30+
return profit;
31+
}

13.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
int romanToInt(string s) {
2+
map<char, int> mp;
3+
mp['I'] = 1;
4+
mp['V'] = 5;
5+
mp['X'] = 10;
6+
mp['L'] = 50;
7+
mp['C'] = 100;
8+
mp['D'] = 500;
9+
mp['M'] = 1000;
10+
11+
int len = s.size();
12+
char c = s[0];
13+
int sum = 0;
14+
int val = mp[c];
15+
int i = 1;
16+
bool flag = true;
17+
while (i < len)
18+
{
19+
if (s[i] == c)
20+
{
21+
val += mp[c];
22+
if (!flag)
23+
{
24+
sum += val;
25+
val = 0;
26+
flag = true;
27+
++i;
28+
if (i == len)
29+
break;
30+
c = s[i];
31+
val = mp[c];
32+
++i;
33+
}
34+
else
35+
++i;
36+
}
37+
else if (mp[s[i]] < mp[c])
38+
{
39+
sum += val;
40+
val = mp[s[i]];
41+
c = s[i];
42+
flag = false;
43+
++i;
44+
}
45+
else
46+
{
47+
sum += -val + mp[s[i]];
48+
val = 0;
49+
flag = true;
50+
++i;
51+
if (i == len)
52+
break;
53+
c = s[i];
54+
val = mp[c];
55+
++i;
56+
}
57+
}
58+
if (val != 0)
59+
sum += val;
60+
61+
return sum;
62+
}

447.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
int numberOfBoomerangs(vector<pair<int, int>>& points) {
2+
int sz = points.size();
3+
int** distance = new int* [sz];
4+
for (int i = 0; i != sz; ++i)
5+
distance[i] = new int[sz];
6+
for (int i = 0; i != sz; ++i)
7+
{
8+
for (int j = i; j != sz; ++j)
9+
{
10+
if (i == j)
11+
distance[i][j] = 0;
12+
else
13+
{
14+
int dx = points[i].first - points[j].first;
15+
int dy = points[i].second - points[j].second;
16+
distance[j][i] = distance[i][j] = dx * dx + dy * dy;
17+
}
18+
}
19+
sort(distance[i], distance[i] + sz);
20+
}
21+
22+
int sum = 0;
23+
for (int i = 0; i != sz; ++i)
24+
{
25+
int tmpdist = distance[i][0];
26+
int j = 1;
27+
int cnt = 1;
28+
while (j < sz)
29+
{
30+
if (distance[i][j] == tmpdist)
31+
++cnt;
32+
else
33+
{
34+
if (cnt > 1)
35+
sum += cnt * (cnt - 1);
36+
tmpdist = distance[i][j];
37+
cnt = 1;
38+
}
39+
++j;
40+
}
41+
if (cnt > 1)
42+
sum += cnt * (cnt - 1);
43+
}
44+
45+
for (int i = 0; i != sz; ++i)
46+
delete[] distance[i];
47+
delete[] distance;
48+
49+
return sum;
50+
}

530.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
int getMinimumDifference(TreeNode* root) {
2+
vector<int> vec;
3+
add2vec(vec, root);
4+
sort(vec.begin(), vec.end());
5+
6+
int len = vec.size();
7+
int min_diff = abs(vec[1] - vec[0]);
8+
for (int i = 2; i < len; ++i)
9+
{
10+
int diff = abs(vec[i] - vec[i - 1]);
11+
if (diff < min_diff)
12+
min_diff = diff;
13+
}
14+
15+
return min_diff;
16+
}
17+
18+
void add2vec(vector<int>& vec, TreeNode* root)
19+
{
20+
if (root == NULL)
21+
return;
22+
vec.push_back(root->val);
23+
add2vec(vec, root->left);
24+
add2vec(vec, root->right);
25+
}

538.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
TreeNode* convertBST(TreeNode* root) {
2+
if (root == nullptr)
3+
return nullptr;
4+
deque<int> dq;
5+
if (root->left != nullptr)
6+
getBSTValue(root->left, dq);
7+
dq.push_back(root->val);
8+
if (root->right != nullptr)
9+
getBSTValue(root->right, dq);
10+
11+
int len = dq.size();
12+
int sum = dq[len - 1];
13+
for (int i = len - 2; i >= 0; --i)
14+
{
15+
int val = dq[i];
16+
dq[i] += sum;
17+
sum += val;
18+
}
19+
20+
int count = 0;
21+
if (root->left != nullptr)
22+
setBSTValue(root->left, dq, count);
23+
root->val = dq[count++];
24+
if (root->right != nullptr)
25+
setBSTValue(root->right, dq, count);
26+
27+
return root;
28+
}
29+
30+
void getBSTValue(TreeNode* node, deque<int>& dq)
31+
{
32+
if (node->left != nullptr)
33+
getBSTValue(node->left, dq);
34+
dq.push_back(node->val);
35+
if (node->right != nullptr)
36+
getBSTValue(node->right, dq);
37+
}
38+
39+
void setBSTValue(TreeNode* node, deque<int>& dq, int& count)
40+
{
41+
if (node->left != nullptr)
42+
setBSTValue(node->left, dq, count);
43+
node->val = dq[count++];
44+
if (node->right != nullptr)
45+
setBSTValue(node->right, dq, count);
46+
}

551.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
bool checkRecord(string s) {
2+
size_t len = s.size();
3+
if (len <= 1)
4+
return true;
5+
6+
int num_A = 0, num_L = 0;
7+
char status = s[0];
8+
if (status == 'A')
9+
num_A++;
10+
else if (status == 'L')
11+
num_L++;
12+
size_t i = 1;
13+
while (i < len)
14+
{
15+
if (s[i] == 'P')
16+
{
17+
status = s[i];
18+
num_L = 0;
19+
}
20+
else if (s[i] == 'A')
21+
{
22+
if (num_A == 1)
23+
return false;
24+
num_A = 1;
25+
num_L = 0;
26+
status = s[i];
27+
}
28+
else
29+
{
30+
if (num_L == 2)
31+
return false;
32+
num_L++;
33+
status = s[i];
34+
}
35+
i++;
36+
}
37+
38+
return true;
39+
}

563.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
int findTilt(TreeNode* root) {
2+
if (root == NULL)
3+
return 0;
4+
else
5+
return abs(subSum(root->left) - subSum(root->right)) + findTilt(root->left) + findTilt(root->right);
6+
}
7+
8+
9+
int subSum(TreeNode* node)
10+
{
11+
if (node == NULL)
12+
return 0;
13+
return node->val + subSum(node->left) + subSum(node->right);
14+
}

598.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
int maxCount(int m, int n, vector<vector<int>>& ops) {
2+
int row = ops.size();
3+
if (row == 0)
4+
return m*n;
5+
int col = ops[0].size();
6+
7+
int minrow = ops[0][0], mincol = ops[0][1];
8+
for (int i = 1; i < row; ++i)
9+
{
10+
if (ops[i][0] < minrow)
11+
minrow = ops[i][0];
12+
if (ops[i][1] < mincol)
13+
mincol = ops[i][1];
14+
}
15+
16+
return minrow * mincol;
17+
}

599.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
2+
using SI = map<string, int>;
3+
SI mp1, mp2;
4+
int len1 = list1.size(), len2 = list2.size();
5+
if (len1 == 0 || len2 == 0)
6+
return {};
7+
8+
for (int i = 0; i < len1; ++i)
9+
{
10+
mp1.insert(pair<string, int>(list1[i], i));
11+
}
12+
for (int i = 0; i < len2; ++i)
13+
{
14+
mp2.insert(pair<string, int>(list2[i], i));
15+
}
16+
17+
vector<string> res;
18+
int index = 0, ct = 0;
19+
int maxindex = 0;
20+
for (int i = 0; i < len1; ++i)
21+
{
22+
if (mp2.find(list1[i]) != mp2.end())
23+
{
24+
string s = list1[i];
25+
int sumindex = mp1[s] + mp2[s];
26+
if (maxindex == 0)
27+
{
28+
if (ct == 0)
29+
{
30+
maxindex = sumindex;
31+
ct++;
32+
res.push_back(s);
33+
}
34+
}
35+
else
36+
{
37+
if (maxindex == sumindex)
38+
{
39+
res.push_back(s);
40+
ct++;
41+
}
42+
else if (maxindex > sumindex)
43+
{
44+
res.push_back(s);
45+
maxindex = sumindex;
46+
index = ct;
47+
ct++;
48+
}
49+
}
50+
}
51+
}
52+
53+
return vector<string>(res.begin() + index, res.end());
54+
}

690.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
int getImportance(vector<Employee*> employees, int id) {
2+
map<int, Employee*> mp;
3+
int len = employees.size();
4+
for (int i = 0; i < len; ++i)
5+
mp.insert(pair<int, Employee*>(employees[i]->id, employees[i]));
6+
7+
deque<Employee*> dq;
8+
dq.push_back(mp[id]);
9+
int sum = 0;
10+
while (!dq.empty())
11+
{
12+
int sz = dq.size();
13+
for (int i = 0; i < sz; ++i)
14+
{
15+
sum += dq[i]->importance;
16+
len = dq[i]->subordinates.size();
17+
for (int j = 0; j < len; ++j)
18+
dq.push_back(mp[dq[i]->subordinates[j]]);
19+
}
20+
dq.erase(dq.begin(), dq.begin() + sz);
21+
}
22+
23+
return sum;
24+
}

0 commit comments

Comments
 (0)