In this post, we will provide solutions for Day 1 striver sde sheet.
Day 1: Arrays
1. Set Matrix Zeroes
class Solution { public: void setZeroes(vector<vector <int>>& matrix) { int r=matrix.size(),c=matrix[0].size(); vector<int> rows(r,0),cols(c,0); for(int i=0;i<r;i++) { for(int j=0;j<c;j++) { if(matrix[i][j]==0) { rows[i]=1; cols[j]=1; } } } for(int i=0;i<r;i++) { for(int j=0;j<c;j++) { if(cols[j]==1||rows[i]==1) { matrix[i][j]=0; } } } } };
2. Pascal's Triangle
class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> ans(numRows); for(int i=0;i<numRows;i++) { ans[i].resize(i+1,1); for(int j=0;j<=i;j++) { if(j==0||j==i) continue; ans[i][j]=ans[i-1][j-1]+ans[i-1][j]; } } return ans; } };
3. Next Permutation in C++
In this program, we are going to make a c++ program for next permutation.
Credits: Striver SDE Sheet
A man named Narayana Pandita presented the following algorithm to solve the next permutation problem in the 14th century.
- Find the largest index "ind" such that nums[ind]<nums[ind+1]. If there is no such index exist just reverse the array and return.
- Find the largest index j>ind such that nums[ind]<nums[j].
- Swap (nums[ind],nums[j]);
- Reverse the subarray on the right side of nums[ind]. {reverse(nums.begin()+ind+1,nums.end());}
class Solution { public: void nextPermutation(vector<int>& nums) { int n=nums.size(); int ind=-1; for(int i=n-2;i>=0;i--) { if(nums[i]<nums[i+1]) { ind=i; break; } } if(ind==-1) { reverse(nums.begin(),nums.end()); return; } for(int j=n-1;j>ind;j--) { if(nums[j]>nums[ind]) { swap(nums[j],nums[ind]); break; } } reverse(nums.begin()+ind+1,nums.end()); } };
In this program, we just coded the algorithm for next permutation given by Narayana Pandita.
4. Maximum Subarray
In this question, we have to return the maximum subarray sum.
class Solution { public: int maxSubArray(vector<int>& nums) { int curr=0,ans=INT_MIN; for(auto it:nums) { curr+=it; ans=max(ans,curr); if(curr<0) curr=0; } return ans; } };
5. Sort 0,1 and 2
void sortColors(vector<int>& nums) { int i=0,j=0,k=nums.size()-1; while(j<=k) { if(nums[j]==1) j++; else if(nums[j]==0) swap(nums[i++],nums[j++]); else if(nums[j]==2) swap(nums[k--],nums[j]); } }
6. Best Time to Buy and Sell Stock
int maxProfit(vector<int>& prices) { int mn=prices[0],ans=0; for(auto it:prices) { ans=max(ans,it-mn); mn=min(it,mn); } return ans; }
I want to update you about the Sale. If you purchase a coding ninjas course today, you shall get a flat 40% discount (30% Early Bird + 10% from my side) on the course. [course]