Skip to content

Commit 8733de7

Browse files
committed
7 problems solved.
1 parent 41f8c43 commit 8733de7

File tree

7 files changed

+286
-0
lines changed

7 files changed

+286
-0
lines changed

src/1415.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
string getHappyString(int n, int k) {
2+
int maxn = 3*pow(2, n-1);
3+
if (k > maxn)
4+
return "";
5+
6+
string res(n, ' ');
7+
int ct = 0;
8+
for (int i = 0; i < 3; ++i)
9+
{
10+
dfs('a'+i, 0, n, ct, k, res);
11+
if (ct == k)
12+
break;
13+
}
14+
15+
return res;
16+
}
17+
18+
void dfs(char c, int m, int n, int& ct, int k, string& res)
19+
{
20+
if (ct < k)
21+
{
22+
res[m++] = c;
23+
if (m == n)
24+
{
25+
++ct;
26+
if (ct == k)
27+
return;
28+
}
29+
else
30+
{
31+
for (int i = 0; i < 3; ++i)
32+
{
33+
if ('a'+i != c)
34+
dfs('a'+i, m, n, ct, k, res);
35+
}
36+
}
37+
}
38+
}

src/1433.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
bool checkIfCanBreak(string s1, string s2) {
2+
int len = s1.size();
3+
if (len == 1)
4+
return true;
5+
6+
int num[2][26];
7+
memset(num, 0, 2*26*sizeof(int));
8+
for (int i = 0; i < len; ++i)
9+
{
10+
num[0][s1[i]-'a']++;
11+
num[1][s2[i]-'a']++;
12+
}
13+
14+
int i = 25;
15+
for (; i >= 0; --i)
16+
{
17+
if (num[0][i] != num[1][i])
18+
break;
19+
}
20+
if (i <= 0)
21+
return true;
22+
if (num[0][i] > num[1][i])
23+
{
24+
int j = i;
25+
int r = num[0][i];
26+
while (i >= 0 && j >= 0)
27+
{
28+
if (r >= num[1][j])
29+
{
30+
r -= num[1][j];
31+
--j;
32+
}
33+
else
34+
{
35+
--i;
36+
for (; i >= j; --i)
37+
{
38+
r += num[0][i];
39+
if (r >= num[1][j])
40+
break;
41+
}
42+
if (i < j)
43+
return false;
44+
}
45+
}
46+
return true;
47+
}
48+
else
49+
{
50+
int j = i;
51+
int r = num[1][i];
52+
while (i >= 0 && j >= 0)
53+
{
54+
if (r >= num[0][j])
55+
{
56+
r -= num[0][j];
57+
--j;
58+
}
59+
else
60+
{
61+
--i;
62+
for (; i >= j; --i)
63+
{
64+
r += num[1][i];
65+
if (r >= num[0][j])
66+
break;
67+
}
68+
if (i < j)
69+
return false;
70+
}
71+
}
72+
return true;
73+
}
74+
}

src/1457.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
int pseudoPalindromicPaths (TreeNode* root) {
2+
int arr[10] = {0};
3+
int ct = 0;
4+
5+
search(root, arr, ct);
6+
7+
return ct;
8+
}
9+
10+
void search(TreeNode* node, int* arr, int& ct)
11+
{
12+
int v = node->val;
13+
arr[v]++;
14+
if (node->left == nullptr && node->right == nullptr)
15+
{
16+
int n = 0;
17+
for (int i = 1; i < 10; ++i)
18+
{
19+
if (arr[i]%2 == 1)
20+
{
21+
++n;
22+
if (n == 2)
23+
break;
24+
}
25+
}
26+
if (n < 2)
27+
++ct;
28+
29+
return;
30+
}
31+
if (node->left != nullptr)
32+
{
33+
search(node->left, arr, ct);
34+
arr[node->left->val]--;
35+
}
36+
if (node->right != nullptr)
37+
{
38+
search(node->right, arr, ct);
39+
arr[node->right->val]--;
40+
}
41+
}

src/1652.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
vector<int> decrypt(vector<int>& code, int k) {
2+
int len = code.size();
3+
if (len == 1)
4+
return {0};
5+
6+
vector<int> res(len, 0);
7+
if (k == 0)
8+
return res;
9+
if (k > 0)
10+
{
11+
int i = 0, j = 1;
12+
int sum = 0;
13+
for (; j <= k; ++j)
14+
sum += code[(i+j)%len];
15+
res[0] = sum;
16+
++i;
17+
int last = (k+1)%len;
18+
while (i < len)
19+
{
20+
sum += code[last] - code[i];
21+
res[i] = sum;
22+
last = (last+1)%len;
23+
++i;
24+
}
25+
return res;
26+
}
27+
else
28+
{
29+
int i = 0, j = 1;
30+
int sum = 0;
31+
for (; j <= -k; ++j)
32+
sum += code[(i-j+len)%len];
33+
res[0] = sum;
34+
++i;
35+
int last = len+k;
36+
while (i < len)
37+
{
38+
sum += code[i-1] - code[last];
39+
res[i] = sum;
40+
last = (last+1)%len;
41+
++i;
42+
}
43+
return res;
44+
}
45+
}

src/1752.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
bool check(vector<int>& nums) {
2+
int len = nums.size();
3+
if (len <= 2)
4+
return true;
5+
int i = 0;
6+
while (i < len-1 && nums[i] == nums[i+1])
7+
++i;
8+
if (i == len-1)
9+
return true;
10+
11+
int val = 0;
12+
bool flag = false;
13+
if (nums[i] < nums[i+1])
14+
flag = true;
15+
if (flag)
16+
{
17+
val = nums[i];
18+
++i;
19+
while (i < len && nums[i] >= nums[i-1])
20+
++i;
21+
if (i == len)
22+
return true;
23+
if (nums[i] > val)
24+
return false;
25+
++i;
26+
while (i < len && nums[i] >= nums[i-1] && nums[i] <= val)
27+
++i;
28+
return i == len;
29+
}
30+
else
31+
{
32+
val = nums[i];
33+
++i;
34+
while (i < len-1 && nums[i] <= nums[i+1] && nums[i+1] <= val)
35+
++i;
36+
return i == len-1;
37+
}
38+
}

src/1758.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
int minOperations(string s) {
2+
int len = s.size();
3+
int sum1 = 0, sum2 = 0;
4+
for (int i = 0; i < len; ++i)
5+
{
6+
if (i%2 == 0 && s[i] == '1')
7+
++sum1;
8+
else if (i%2 == 1 && s[i] == '0')
9+
++sum1;
10+
}
11+
12+
for (int i = 0; i < len; ++i)
13+
{
14+
if (i%2 == 0 && s[i] == '0')
15+
++sum2;
16+
else if (i%2 == 1 && s[i] == '1')
17+
++sum2;
18+
}
19+
20+
if (sum1 < sum2)
21+
return sum1;
22+
else
23+
return sum2;
24+
}

src/1768.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
string mergeAlternately(string word1, string word2) {
2+
int len1 = word1.size();
3+
int len2 = word2.size();
4+
string res(len1+len2, ' ');
5+
int i = 0, j = 0;
6+
int k = 0;
7+
while (i < len1 && j < len2)
8+
{
9+
if (k%2 == 0)
10+
res[k++] = word1[i++];
11+
else
12+
res[k++] = word2[j++];
13+
}
14+
if (i < len1)
15+
{
16+
for (; i < len1; ++i)
17+
res[k++] = word1[i];
18+
}
19+
else if (j < len2)
20+
{
21+
for (; j < len2; ++j)
22+
res[k++] = word2[j];
23+
}
24+
25+
return res;
26+
}

0 commit comments

Comments
 (0)