Skip to content

Commit 27f87e2

Browse files
committed
12 problems solved
1 parent c4b076b commit 27f87e2

File tree

12 files changed

+306
-0
lines changed

12 files changed

+306
-0
lines changed

src/1046.cpp

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

src/1078.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
vector<string> findOcurrences(string text, string first, string second) {
2+
int i = 0;
3+
int sz = text.size();
4+
5+
vector<string> res;
6+
while (i <sz)
7+
{
8+
int pos = text.find(' ', i);
9+
if (pos != string::npos)
10+
{
11+
string w1 = text.substr(i, pos-i);
12+
if (w1 == first)
13+
{
14+
int pos2 = text.find(' ', pos+1);
15+
if (pos2 != string::npos && pos2 <= sz-2)
16+
{
17+
string w2 = text.substr(pos+1, pos2-pos-1);
18+
if (w2 == second)
19+
{
20+
int pos3 = text.find(' ', pos2+1);
21+
if (pos3 != string::npos)
22+
{
23+
res.push_back(text.substr(pos2+1, pos3-pos2-1));
24+
i = pos+1;
25+
}
26+
else
27+
{
28+
res.push_back(text.substr(pos2+1));
29+
break;
30+
}
31+
}
32+
else
33+
i = pos+1;
34+
}
35+
else
36+
break;
37+
}
38+
else
39+
i = pos+1;
40+
}
41+
else
42+
break;
43+
}
44+
45+
return res;
46+
}

src/1108.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
string defangIPaddr(string address) {
2+
int sz = address.size();
3+
string res(sz+6, ' ');
4+
int i = 0, j = 0;
5+
while (i < sz)
6+
{
7+
if (address[i] != '.')
8+
res[j++] = address[i];
9+
else
10+
{
11+
res[j] = '[';
12+
res[j+1] = '.';
13+
res[j+2] = ']';
14+
j += 3;
15+
}
16+
++i;
17+
}
18+
19+
return res;
20+
}

src/1122.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
2+
int len1 = arr1.size();
3+
int len2 = arr2.size();
4+
if (len1 == 0)
5+
return arr1;
6+
if (len2 == 0)
7+
{
8+
sort(arr1.begin(), arr1.end());
9+
return arr1;
10+
}
11+
12+
map<int, int> mp;
13+
for (int i = 0; i < len2; ++i)
14+
mp[arr2[i]] = i;
15+
16+
auto cmp = [&mp](int a, int b){
17+
auto iter1 = mp.find(a);
18+
auto iter2 = mp.find(b);
19+
if (iter1 != mp.end() && iter2 != mp.end())
20+
return mp[a] < mp[b];
21+
else if (iter1 != mp.end() && iter2 == mp.end())
22+
return true;
23+
else if (iter1 == mp.end() && iter2 != mp.end())
24+
return false;
25+
else
26+
return a < b;
27+
};
28+
29+
sort(arr1.begin(), arr1.end(), cmp);
30+
return arr1;
31+
}

src/1185.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string dayOfTheWeek(int day, int month, int year) {
2+
int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
3+
string dow[7] = {"Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"};
4+
5+
int sum = 0;
6+
if (year == 1971)
7+
{
8+
if (month == 1)
9+
sum += day;
10+
else
11+
{
12+
for (int i = 0; i < month-1; ++i)
13+
sum += month_days[i];
14+
sum += day;
15+
}
16+
}
17+
else
18+
{
19+
for (int i = 1971; i < year; ++i)
20+
{
21+
if ((i%4 == 0 && i%100 != 0) || (i%400 == 0))
22+
sum += 366;
23+
else
24+
sum += 365;
25+
}
26+
for (int i = 0; i < month-1; ++i)
27+
sum += month_days[i];
28+
if (((year%4 == 0 && year%100 != 0) || (year%400 == 0)) && (month > 2))
29+
sum++;
30+
sum += day;
31+
}
32+
33+
sum %= 7;
34+
return dow[sum];
35+
}

src/1200.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
vector<vector<int>> minimumAbsDifference(vector<int>& arr) {
2+
int len = arr.size();
3+
sort(arr.begin(), arr.end());
4+
5+
map<int, vector<int>> mp;
6+
int minval = 2e6;
7+
for (int i = 0; i < len-1; ++i)
8+
{
9+
int t = abs(arr[i+1]-arr[i]);
10+
if (t <= minval)
11+
{
12+
minval = t;
13+
mp[minval].push_back(i);
14+
}
15+
}
16+
17+
int sz = mp[minval].size();
18+
vector<vector<int>> res(sz, vector<int>(2,0));
19+
for (int i = 0; i < sz; ++i)
20+
{
21+
res[i][0] = arr[mp[minval][i]];
22+
res[i][1] = arr[mp[minval][i]+1];
23+
}
24+
25+
return res;
26+
}

src/1221.cpp

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

src/1281.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
int subtractProductAndSum(int n) {
2+
int product = 1, sum = 0;
3+
while (n != 0)
4+
{
5+
product *= n%10;
6+
sum += n%10;
7+
n /= 10;
8+
}
9+
10+
return product - sum;
11+
}

src/1290.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
int getDecimalValue(ListNode* head) {
2+
int res = 0;
3+
while (head != NULL)
4+
{
5+
res = res*2 + head->val;
6+
head = head->next;
7+
}
8+
9+
return res;
10+
}

src/1295.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
int findNumbers(vector<int>& nums) {
2+
int len = nums.size();
3+
int ct = 0;
4+
for (int i = 0; i < len; ++i)
5+
{
6+
int t = 0;
7+
while (nums[i] != 0)
8+
{
9+
nums[i] /= 10;
10+
++t;
11+
}
12+
if (t%2 == 0)
13+
++ct;
14+
}
15+
16+
return ct;
17+
}

src/938.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
int rangeSumBST(TreeNode* root, int L, int R) {
2+
if (root == nullptr || L > R)
3+
return 0;
4+
vector<int> value;
5+
midTravel(root, value);
6+
auto p = lower_bound(value.begin(), value.end(), L);
7+
if (p == value.end())
8+
return 0;
9+
10+
int sum = 0;
11+
auto q = upper_bound(value.begin(), value.end(), R);
12+
for (auto iter = p; iter != q; ++iter)
13+
sum += *iter;
14+
15+
return sum;
16+
}
17+
18+
void midTravel(TreeNode* node, vector<int>& value)
19+
{
20+
if (node != nullptr)
21+
{
22+
midTravel(node->left, value);
23+
value.push_back(node->val);
24+
midTravel(node->right, value);
25+
}
26+
}

src/961.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
int repeatedNTimes(vector<int>& A) {
2+
int ct[10000] = {0};
3+
int len = A.size();
4+
int i = 0;
5+
for (; i < len; ++i)
6+
{
7+
ct[A[i]]++;
8+
if (ct[A[i]] == (len/2))
9+
break;
10+
}
11+
12+
return A[i];
13+
}

0 commit comments

Comments
 (0)