Skip to content

Commit 4300828

Browse files
authored
Create 1187. Make Array Strictly Increasing.cpp
1 parent 0e48abc commit 4300828

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
int dp[2005][2005][2];
2+
class Solution {
3+
public:
4+
int find(vector<int> arr,int val){
5+
int low=0,high=arr.size()-1,ans=-1;
6+
while(low<=high){
7+
int mid = (low+high)/2;
8+
if(arr[mid]>val){
9+
ans=mid;
10+
high = mid-1;
11+
}
12+
else low = mid+1;
13+
}
14+
return ans;
15+
}
16+
int ways(vector<int> arr1,vector<int> arr2,int i,int j,int flag){
17+
if(i==arr1.size()) return 0;
18+
else if(j==-1){
19+
return min(ways(arr1,arr2,i+1,0,0),1+ways(arr1,arr2,i+1,0,1));
20+
}
21+
if(dp[i][j][flag]==-1){
22+
int last_max;
23+
if(flag==0) last_max = arr1[j];
24+
else last_max = arr2[j];
25+
int ind = find(arr2,last_max);
26+
if(ind==-1){
27+
if(last_max<arr1[i]) return dp[i][j][flag]=ways(arr1,arr2,i+1,i,0);
28+
else return dp[i][j][flag]=1e5;
29+
}
30+
else{
31+
if(last_max<arr1[i]){
32+
return dp[i][j][flag]=min(1+ways(arr1,arr2,i+1,ind,1),ways(arr1,arr2,i+1,i,0));
33+
}
34+
else return dp[i][j][flag]=1+ways(arr1,arr2,i+1,ind,1);
35+
}
36+
}
37+
else return dp[i][j][flag];
38+
}
39+
int makeArrayIncreasing(vector<int>& arr1, vector<int>& arr2) {
40+
int i,j,k,n,m,ct=0;
41+
n = arr1.size()-1;m=arr2.size()-1;
42+
for(i=0;i<n+2;i++){
43+
for(j=0;j<m+2;j++) {dp[i][j][0]=-1;dp[i][j][1]=-1;}
44+
}
45+
sort(arr2.begin(),arr2.end());
46+
k= ways(arr1,arr2,0,-1,0);
47+
if(k>=1e5) return -1;
48+
else return k;
49+
}
50+
};

0 commit comments

Comments
 (0)