Skip to content

Commit 1543f0c

Browse files
committed
5 problems solved.
1 parent 7d1ff60 commit 1543f0c

File tree

5 files changed

+168
-0
lines changed

5 files changed

+168
-0
lines changed

src/1302.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
int deepestLeavesSum(TreeNode* root) {
2+
deque<TreeNode*> dq;
3+
dq.push_back(root);
4+
int len = 1;
5+
int sum = 0;
6+
while (len != 0)
7+
{
8+
int subsum = 0;
9+
for (int i = 0; i < len; ++i)
10+
{
11+
TreeNode* node = dq[i];
12+
subsum += node->val;
13+
if (node->left != nullptr)
14+
dq.push_back(node->left);
15+
if (node->right != nullptr)
16+
dq.push_back(node->right);
17+
}
18+
sum = subsum;
19+
dq.erase(dq.begin(), dq.begin()+len);
20+
len = dq.size();
21+
}
22+
23+
return sum;
24+
}

src/1329.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
2+
int row = mat.size();
3+
int col = mat[0].size();
4+
if (row == 1 || col == 1)
5+
return mat;
6+
7+
int minval = row < col ? row : col;
8+
vector<int> vec(minval);
9+
for (int i = row-2; i >= 0; --i)
10+
{
11+
int k = row-i;
12+
if (col < k)
13+
k = col;
14+
for (int j = 0; j < k; ++j)
15+
vec[j] = mat[i+j][j];
16+
sort(vec.begin(), vec.begin()+k);
17+
for (int j = 0; j < k; ++j)
18+
mat[i+j][j] = vec[j];
19+
}
20+
21+
for (int i = 1; i < col-1; ++i)
22+
{
23+
int k = col-i;
24+
if (row < k)
25+
k = row;
26+
for (int j = 0; j < k; ++j)
27+
vec[j] = mat[j][i+j];
28+
sort(vec.begin(), vec.begin()+k);
29+
for (int j = 0; j < k; ++j)
30+
mat[j][i+j] = vec[j];
31+
}
32+
33+
return mat;
34+
}

src/235.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
2+
if (root == p || root == q)
3+
return root;
4+
vector<TreeNode*> path;
5+
TreeNode* node = root;
6+
while (node != nullptr)
7+
{
8+
path.push_back(node);
9+
if (node->val > p->val)
10+
{
11+
node = node->left;
12+
}
13+
else if (node->val == p->val)
14+
break;
15+
else
16+
{
17+
node = node->right;
18+
}
19+
}
20+
21+
node = root;
22+
int len = path.size();
23+
int i = 0;
24+
while (i < len && node == path[i])
25+
{
26+
if (node == p || node == q)
27+
return node;
28+
node = node->val > q->val ? node->left : node->right;
29+
++i;
30+
}
31+
32+
return path[i-1];
33+
}

src/414.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
int thirdMax(vector<int>& nums) {
2+
int len = nums.size();
3+
if (len == 1)
4+
return nums[0];
5+
if (len == 2)
6+
return nums[0] > nums[1] ? nums[0] : nums[1];
7+
int arr[3] = {0};
8+
arr[0] = nums[0];
9+
int ct = 1;
10+
int i = 1;
11+
while (i < len)
12+
{
13+
if (ct == 1)
14+
{
15+
if (nums[i] != arr[0])
16+
{
17+
arr[1] = nums[i];
18+
++ct;
19+
}
20+
}
21+
else if (ct == 2)
22+
{
23+
if (nums[i] != arr[0] && nums[i] != arr[1])
24+
{
25+
arr[2] = nums[i];
26+
++ct;
27+
sort(arr, arr+3);
28+
}
29+
}
30+
else
31+
{
32+
if (nums[i] > arr[0] && nums[i] < arr[1])
33+
arr[0] = nums[i];
34+
else if (nums[i] > arr[1] && nums[i] < arr[2])
35+
{
36+
arr[0] = arr[1];
37+
arr[1] = nums[i];
38+
}
39+
else if (nums[i] > arr[2])
40+
{
41+
arr[0] = arr[1];
42+
arr[1] = arr[2];
43+
arr[2] = nums[i];
44+
}
45+
}
46+
++i;
47+
}
48+
49+
if (ct == 1)
50+
return arr[0];
51+
else if (ct == 2)
52+
return arr[0] > arr[1] ? arr[0] : arr[1];
53+
else
54+
return arr[0];
55+
}

src/643.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
double findMaxAverage(vector<int>& nums, int k) {
2+
int maxsum = INT_MIN;
3+
int len = nums.size();
4+
if (len <= k-1)
5+
return 0;
6+
int subsum = 0;
7+
for (int i = 0; i < k; ++i)
8+
subsum += nums[i];
9+
if (subsum > maxsum)
10+
maxsum = subsum;
11+
int i = 0, j = k;
12+
while (j < len)
13+
{
14+
subsum = subsum - nums[i] + nums[j];
15+
if (subsum > maxsum)
16+
maxsum = subsum;
17+
++i;
18+
++j;
19+
}
20+
21+
return (double)maxsum/k;
22+
}

0 commit comments

Comments
 (0)