26 July 2023
I am still working on the project I have started recently. I am facing some issues but I am doing some progress. Apart from that I solved some DSA problems.
My approach:
As usual, my very first approach was a brute force method using recursion. Then I used memoization and eventually solved it using Dynamic Programming.
My solution:
- Recursion with Memoization
class Solution {
public:
int helper(vector<vector<int>>& grid, int m, int n, int i, int j, int** arr){
if(i>=m || j>=n){
return INT_MAX;
}
if(i==m-1 && j==n-1){
return grid[i][j];
}
if(arr[i][j]!=-1){
return arr[i][j];
}
int a = helper(grid, m,n,i,j+1,arr);
int b = helper(grid, m,n,i+1,j,arr);
arr[i][j] = min(a,b)+grid[i][j];
return min(a,b)+grid[i][j];
}
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int** arr = new int*[m];
for(int i=0;i<m;i++){
arr[i] = new int[n];
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
arr[i][j] = -1;
}
}
return helper(grid,m,n,0,0,arr);
}
};
- Dynamic Programming
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int** arr = new int*[m];
for(int i=0;i<m;i++){
arr[i] = new int[n];
}
arr[0][0] = grid[0][0];
for(int i=1;i<m;i++){
arr[i][0] = grid[i][0]+arr[i-1][0];
}
for(int i=1;i<n;i++){
arr[0][i] = grid[0][i]+arr[0][i-1];
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
arr[i][j] = grid[i][j]+min(arr[i-1][j], arr[i][j-1]);
}
}
return arr[m-1][n-1];
}
};
Longest Palindrome
My approach:
I solved it by using a hashmap and a vector.
My solution:
class Solution {
public:
int longestPalindrome(string s) {
unordered_map<char,int> m;
vector<char> v;
for(int i=0;i<s.size();i++){
if(m.count(s[i])>0){
m[s[i]]++;
continue;
}
m[s[i]] = 1;
v.push_back(s[i]);
}
int maxLength = 0;
for(int i=0;i<v.size();i++){
if(m[v[i]]%2==0){
maxLength+=m[v[i]];
}else{
maxLength+=(m[v[i]]-1);
}
}
if(maxLength%2==0 && maxLength<s.size()){
return maxLength+1;
}
return maxLength;
}
};