Skip to content

Commit 6f17019

Browse files
committed
Passed coding challenge of WAP R&D engr. position. Preparing for live coding round
1 parent 2f2eee8 commit 6f17019

10 files changed

+281
-0
lines changed

.DS_Store

8 KB
Binary file not shown.

Base_7.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
string convertToBase7(int num) {
4+
int sign = (num >= 0) ? 1 : -1;
5+
num = abs(num);
6+
string result;
7+
while(num > 0) {
8+
result += to_string(num % 7);
9+
num /= 7;
10+
}
11+
reverse(result.begin(), result.end());
12+
if(sign < 0) {
13+
result = "-" + result;
14+
}
15+
if(result.empty()) {
16+
result = "0";
17+
}
18+
return result;
19+
}
20+
};

Diagonal_Traverse.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
4+
vector<int> result;
5+
int n = matrix.size();
6+
if(n == 0) return result;
7+
int m = matrix[0].size();
8+
if(m == 0) return result;
9+
result.resize(m * n);
10+
int row = 0, col = 0, d = 0;
11+
int dir[2][2] = {{-1, 1}, {1, -1}};
12+
13+
for (int i = 0; i < m * n; i++) {
14+
result[i] = matrix[row][col];
15+
row += dir[d][0];
16+
col += dir[d][1];
17+
18+
if (row >= n) { row = n - 1; col += 2; d = 1 - d;}
19+
if (col >= m) { col = m - 1; row += 2; d = 1 - d;}
20+
if (row < 0) { row = 0; d = 1 - d;}
21+
if (col < 0) { col = 0; d = 1 - d;}
22+
}
23+
return result;
24+
}
25+
};

Find_Bottom_Left_Tree_Value.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
int findBottomLeftValue(TreeNode* root) {
13+
queue<pair<TreeNode*, int>> Q;
14+
int currLevel = 1;
15+
Q.push({root, currLevel});
16+
int leftMost = root->val;
17+
while(!Q.empty()) {
18+
TreeNode* node = Q.front().first;
19+
int level = Q.front().second;
20+
Q.pop();
21+
if(level > currLevel) {
22+
leftMost = node->val;
23+
currLevel = level;
24+
}
25+
if(node->left) {
26+
Q.push({node->left, level + 1});
27+
}
28+
if(node->right) {
29+
Q.push({node->right, level + 1});
30+
}
31+
}
32+
return leftMost;
33+
}
34+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<int> largestValues(TreeNode* root) {
13+
vector<int> result;
14+
if(!root) return result;
15+
queue<pair<TreeNode*, int>> Q;
16+
int currLevel = 0;
17+
Q.push({root, currLevel});
18+
int maxElem = root->val;
19+
while(!Q.empty()) {
20+
TreeNode* node = Q.front().first;
21+
int value = node->val;
22+
int level = Q.front().second;
23+
if(level > currLevel) {
24+
result.push_back(maxElem);
25+
currLevel = level;
26+
maxElem = value;
27+
} else {
28+
maxElem = max(maxElem, value);
29+
}
30+
Q.pop();
31+
if(node->left) {
32+
Q.push({node->left, level + 1});
33+
}
34+
if(node->right) {
35+
Q.push({node->right, level + 1});
36+
}
37+
}
38+
result.push_back(maxElem);
39+
40+
return result;
41+
}
42+
};

Keyboard_Row.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public:
3+
vector<string> findWords(vector<string>& words) {
4+
unordered_map<int, int> keyRow;
5+
string firstRow = "QWERTYUIOP";
6+
for(int i = 0; i < firstRow.length(); i++) {
7+
keyRow[firstRow[i]] = 1;
8+
}
9+
string secondRow = "ASDFGHJKL";
10+
for(int i = 0; i < secondRow.length(); i++) {
11+
keyRow[secondRow[i]] = 2;
12+
}
13+
string thirdRow = "ZXCVBNM";
14+
for(int i = 0; i < thirdRow.length(); i++) {
15+
keyRow[thirdRow[i]] = 3;
16+
}
17+
vector<string> result;
18+
for(int i = 0; i < words.size(); i++) {
19+
string word = words[i];
20+
unordered_set<int> rows;
21+
for(int j = 0; j < (int)word.length(); j++) {
22+
rows.insert(keyRow[toupper(word[j])]);
23+
}
24+
if(rows.size() == 1) {
25+
result.push_back(word);
26+
}
27+
}
28+
29+
return result;
30+
}
31+
};

Longest_Palindromic_Subsequence.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
int longestPalindromeSubseq(string s) {
4+
int n = (int)s.length();
5+
vector<vector<int>> dp(n, vector<int>(n, 0));
6+
for(int i = 0; i < n; i++) {
7+
dp[i][i] = 1;
8+
}
9+
for(int len = 2; len <= n; len++) {
10+
for(int i = 0; i < n - len + 1; i++) {
11+
int j = i + len - 1;
12+
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
13+
if(s[i] == s[j]) {
14+
dp[i][j] = max(dp[i][j], dp[i + 1][j - 1] + 2);
15+
}
16+
}
17+
}
18+
19+
return dp[0][n - 1];
20+
}
21+
};

Most_Frequent_Subtree_Sum.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
int findFrequentTreeSum(TreeNode* root, unordered_map<int, int>& freq) {
12+
if(!root) {
13+
return 0;
14+
}
15+
int sum = 0;
16+
sum += root->val;
17+
sum += findFrequentTreeSum(root->left, freq);
18+
sum += findFrequentTreeSum(root->right, freq);
19+
20+
freq[sum]++;
21+
return sum;
22+
}
23+
24+
public:
25+
vector<int> findFrequentTreeSum(TreeNode* root) {
26+
vector<int> result;
27+
unordered_map<int, int> freq;
28+
findFrequentTreeSum(root, freq);
29+
int maxFreq = 0;
30+
for(auto it = freq.begin(); it != freq.end(); ++it) {
31+
maxFreq = max(maxFreq, it->second);
32+
}
33+
for(auto it = freq.begin(); it != freq.end(); ++it) {
34+
if(it->second == maxFreq) {
35+
result.push_back(it->first);
36+
}
37+
}
38+
39+
return result;
40+
}
41+
};

Relative_Ranks.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
vector<string> findRelativeRanks(vector<int>& nums) {
4+
int n = (int)nums.size();
5+
vector<pair<int, int>> arr;
6+
for(int i = 0; i < n; i++) {
7+
arr.push_back({nums[i], i});
8+
}
9+
sort(arr.begin(), arr.end(), greater<pair<int, int>>());
10+
vector<string> result(n);
11+
if(arr.size() > 0) {
12+
int pos = arr[0].second;
13+
result[pos] = "Gold Medal";
14+
}
15+
if(arr.size() > 1) {
16+
int pos = arr[1].second;
17+
result[pos] = "Silver Medal";
18+
}
19+
if(arr.size() > 2) {
20+
int pos = arr[2].second;
21+
result[pos] = "Bronze Medal";
22+
}
23+
for(int i = 3; i < n; i++) {
24+
int pos = arr[i].second;
25+
result[pos] = to_string(i + 1);
26+
}
27+
28+
return result;
29+
}
30+
};

Smallest_Good_Base.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
unsigned long long solve(unsigned long long n, int d) {
3+
unsigned long long right = (unsigned long long)(pow(n, 1.0 / d) + 1);
4+
unsigned long long left = 1ull;
5+
while(left <= right) {
6+
unsigned long long mid = left + (right - left) / 2;
7+
unsigned long long num = 1ull, base = 1ull;
8+
for(int i = 0; i < d; i++) {
9+
base *= mid;
10+
num += base;
11+
}
12+
if(num == n) {
13+
return mid;
14+
}
15+
if(num < n) {
16+
left = mid + 1;
17+
} else {
18+
right = mid - 1;
19+
}
20+
}
21+
22+
return -1ull;
23+
}
24+
public:
25+
string smallestGoodBase(string n) {
26+
unsigned long long ulln = (unsigned long long)stoll(n);
27+
for(int i = 62; i >= 1; i--) {
28+
if((1ull << i) < ulln) {
29+
unsigned long long curr = solve(ulln, i);
30+
if(curr != -1) {
31+
return to_string(curr);
32+
}
33+
}
34+
}
35+
return to_string(ulln - 1);
36+
}
37+
};

0 commit comments

Comments
 (0)