Skip to content

Commit 660d46b

Browse files
Added InterviewBit DP questions
1 parent 7e5d778 commit 660d46b

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

InterviewBit/DP/flipArray.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
given array [15, 10, 6], find min no of elements such that when their sign is fliped total sum is minimized;
3+
find min elements to achieve sum = sum(Array)/2
4+
*/
5+
6+
#define ll long long
7+
int Solution::solve(const vector<int> &A) {
8+
int s = 0;
9+
for(int i=0;i<A.size();i++)
10+
s+=A[i];
11+
s=s/2;
12+
13+
vector<vector<ll>> dp(A.size()+1, vector<ll> (s+1, INT_MAX));
14+
15+
for(int i=0;i<dp.size();i++)
16+
dp[i][0]=0;
17+
18+
for(int i=1;i<dp.size();i++){
19+
for(int j=1;j<=s;j++){
20+
if(j>=A[i-1]){
21+
if(dp[i-1][j-A[i-1]]!=INT_MAX){
22+
dp[i][j] = min(dp[i-1][j], dp[i-1][j-A[i-1]]+1);
23+
}
24+
else
25+
dp[i][j] = dp[i-1][j];
26+
}
27+
else
28+
dp[i][j] = dp[i-1][j];
29+
}
30+
}
31+
ll ans=0;
32+
for(int i=s;i>=1;i--){
33+
if(dp[dp.size()-1][i]!=INT_MAX){
34+
ans=dp[dp.size()-1][i];
35+
break;
36+
}
37+
}
38+
return ans;
39+
}

InterviewBit/DP/lls.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
int Solution::longestSubsequenceLength(const vector<int> &A) {
2+
if(A.size()==0)
3+
return 0;
4+
vector<int> incr(A.size(),1);
5+
vector<int> decr(A.size(),1);
6+
7+
for(int i=0;i<incr.size();i++){
8+
for(int j=0;j<i;j++){
9+
if(A[i]>A[j])
10+
incr[i]=max(incr[i],incr[j]+1);
11+
}
12+
}
13+
14+
for(int i=A.size()-2;i>=0;i--){
15+
for(int j=A.size()-1;j>i;j--){
16+
if(A[i]>A[j])
17+
decr[i] = max(decr[j]+1,decr[i]);
18+
}
19+
}
20+
int ans = INT_MIN;
21+
for(int i=0;i<A.size();i++){
22+
ans = max(ans,incr[i]+decr[i]-1);
23+
}
24+
return ans;
25+
}

InterviewBit/DP/waysToDecode.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
int ways(const string& A, int s)
2+
{
3+
if(s == A.size())
4+
return 1;
5+
else if(A[s] == '0')
6+
return 0;
7+
else if(A[s] > '2')
8+
return ways(A,s+1);
9+
else if(s+1 >= A.size())
10+
return ways(A,s+1);
11+
else if(A[s] == '1'
12+
|| (A[s] == '2' && A[s+1] < '7'))
13+
return ways(A,s+1) + ways(A,s+2);
14+
else
15+
return ways(A,s+1);
16+
}
17+
18+
19+
int Solution::numDecodings(string A) {
20+
return ways(A,0);
21+
}
22+

0 commit comments

Comments
 (0)