Skip to content

Commit 30ed7c4

Browse files
committed
477/520 problems solved
1 parent 3e94a60 commit 30ed7c4

6 files changed

+171
-0
lines changed

Continuous_Subarray_Sum.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+
bool checkSubarraySum(vector<int>& nums, int k) {
4+
unordered_map<int, int> indxMap;
5+
int sum = 0;
6+
indxMap[sum] = -1;
7+
for(int i = 0; i < nums.size(); i++) {
8+
sum += nums[i];
9+
if(k != 0) sum %= k;
10+
if(indxMap.count(sum)) {
11+
if(i - indxMap[sum] >= 2) {
12+
return true;
13+
}
14+
} else {
15+
indxMap[sum] = i;
16+
}
17+
}
18+
return false;
19+
}
20+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
bool isSubseq(string const& txt, string const& subseq) {
3+
int n = (int)txt.length();
4+
int m = (int)subseq.length();
5+
if(m > n) return false;
6+
int i = 0, j = 0;
7+
while(i < n and j < m) {
8+
if(subseq[j] == txt[i]) {
9+
j++, i++;
10+
} else {
11+
i++;
12+
}
13+
}
14+
return j == m;
15+
}
16+
public:
17+
string findLongestWord(string s, vector<string>& d) {
18+
string result = "";
19+
int maxLen = 0;
20+
sort(d.begin(), d.end());
21+
for(int i = 0; i < (int)d.size(); i++) {
22+
if(d[i].length() > result.length() and isSubseq(s, d[i])) {
23+
maxLen = (int)d[i].length();
24+
result = d[i];
25+
}
26+
}
27+
28+
return result;
29+
}
30+
};

Minesweeper.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class Solution {
2+
const int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
3+
const int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
4+
5+
bool valid(int x, int y, vector<vector<char>>& board) {
6+
int n = (int)board.size();
7+
int m = (int)board[0].size();
8+
return x >= 0 and y >= 0 and x < n and y < m;
9+
}
10+
11+
int countMine(int x, int y, vector<vector<char>>& board) {
12+
int cnt = 0;
13+
for(int i = 0; i < 8; i++) {
14+
int X = x + dx[i];
15+
int Y = y + dy[i];
16+
cnt += (valid(X, Y, board) and board[X][Y] == 'M');
17+
}
18+
return cnt;
19+
}
20+
21+
void reveal(int x, int y, vector<vector<char>>& board) {
22+
int mine = countMine(x, y, board);
23+
if(mine > 0) {
24+
board[x][y] = mine + '0';
25+
return;
26+
}
27+
board[x][y] = 'B';
28+
for(int i = 0; i < 8; i++) {
29+
int X = x + dx[i];
30+
int Y = y + dy[i];
31+
if(valid(X, Y, board) and board[X][Y] == 'E') {
32+
reveal(X, Y, board);
33+
}
34+
}
35+
}
36+
37+
public:
38+
vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {
39+
int x = click[0], y = click[1];
40+
switch(board[x][y]) {
41+
case 'M':
42+
board[x][y] = 'X';
43+
break;
44+
case 'E':
45+
reveal(x, y, board);
46+
break;
47+
default:
48+
break;
49+
}
50+
return board;
51+
}
52+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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 getMinimumDifference(TreeNode* root, int& prev) {
12+
if(!root) return INT_MAX;
13+
int leftMin = getMinimumDifference(root->left, prev);
14+
int diff = (prev == INT_MIN) ? INT_MAX : root->val - prev;
15+
prev = root->val;
16+
int rightMin = getMinimumDifference(root->right, prev);
17+
18+
return min(diff, min(leftMin, rightMin));
19+
}
20+
public:
21+
int getMinimumDifference(TreeNode* root) {
22+
int prev = INT_MIN;
23+
return getMinimumDifference(root, prev);
24+
}
25+
};

Next_Greater_Element_I.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
4+
int n = (int)findNums.size();
5+
int m = (int)nums.size();
6+
unordered_map<int, int> nxtGreaterMap;
7+
stack<int> Stack;
8+
for(int i = 0; i < m; i++) {
9+
while(!Stack.empty() and Stack.top() < nums[i]) {
10+
nxtGreaterMap[Stack.top()] = nums[i];
11+
Stack.pop();
12+
}
13+
Stack.push(nums[i]);
14+
}
15+
vector<int> result(n);
16+
for(int i = 0; i < n; i++) {
17+
result[i] = (nxtGreaterMap.count(findNums[i])) ? nxtGreaterMap[findNums[i]] : -1;
18+
}
19+
20+
return result;
21+
}
22+
};

Next_Greater_Element_II.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> nextGreaterElements(vector<int>& nums) {
4+
int n = (int)nums.size();
5+
for(int i = 0; i < n - 1; i++) {
6+
nums.push_back(nums[i]);
7+
}
8+
stack<pair<int, int>> Stack;
9+
vector<int> result(n, -1);
10+
for(int i = 0; i < (int)nums.size(); ++i) {
11+
while(!Stack.empty() and Stack.top().first < nums[i]) {
12+
result[Stack.top().second] = nums[i];
13+
Stack.pop();
14+
}
15+
if(i < n) {
16+
Stack.push({nums[i], i});
17+
}
18+
}
19+
20+
return result;
21+
}
22+
};

0 commit comments

Comments
 (0)