Skip to content

Commit 8956988

Browse files
committed
GFG
1 parent a72e48e commit 8956988

7 files changed

+223
-0
lines changed
+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution
2+
{
3+
public:
4+
// Function to find the maximum profit and the number of jobs done.
5+
static bool comp(Job a, Job b)
6+
{
7+
return a.profit > b.profit;
8+
}
9+
10+
vector<int> JobScheduling(Job arr[], int n)
11+
{
12+
sort(arr, arr + n, comp);
13+
int jcount = 0, jprofit = 0;
14+
int md = arr[0].dead;
15+
for (int i = 1; i < n; ++i)
16+
{
17+
md = max(md, arr[i].dead);
18+
}
19+
int slot[md + 1];
20+
memset(slot, -1, sizeof(slot));
21+
for (int i = 0; i < n; ++i)
22+
{
23+
for (int j = arr[i].dead; j > 0; --j)
24+
{
25+
if (slot[j] == -1)
26+
{
27+
slot[j] = i;
28+
jcount++;
29+
jprofit += arr[i].profit;
30+
break;
31+
}
32+
}
33+
}
34+
return {jcount, jprofit};
35+
}
36+
};
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
int LCSof3(string A, string B, string C, int n1, int n2, int n3)
2+
{
3+
int dp[n1 + 1][n2 + 1][n3 + 1];
4+
for (int i = 0; i <= n1; ++i)
5+
{
6+
for (int j = 0; j <= n2; ++j)
7+
{
8+
for (int k = 0; k <= n3; ++k)
9+
{
10+
if (i == 0 || j == 0 || k == 0)
11+
{
12+
dp[i][j][k] = 0;
13+
}
14+
else if (A[i - 1] == B[j - 1] && A[i - 1] == C[k - 1])
15+
{
16+
dp[i][j][k] = 1 + dp[i - 1][j - 1][k - 1];
17+
}
18+
else
19+
{
20+
dp[i][j][k] = max({dp[i - 1][j][k], dp[i][j - 1][k], dp[i][j][k - 1]});
21+
}
22+
}
23+
}
24+
}
25+
return dp[n1][n2][n3];
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution
2+
{
3+
public:
4+
// Function to find length of longest increasing subsequence.
5+
int dp[100001];
6+
int lis(int n, int *a, int &ans)
7+
{
8+
if (n == 1)
9+
{
10+
return dp[n] = 1;
11+
}
12+
13+
if (dp[n] != -1)
14+
{
15+
return dp[n];
16+
}
17+
int res = 0, maxi = 1;
18+
for (int i = 1; i < n; ++i)
19+
{
20+
res = lis(i, a, ans);
21+
if (a[i - 1] < a[n - 1])
22+
{
23+
maxi = max(maxi, res + 1);
24+
}
25+
}
26+
ans = max(ans, maxi);
27+
return dp[n] = maxi;
28+
}
29+
30+
int longestSubsequence(int n, int a[])
31+
{
32+
int ans = 1;
33+
memset(dp, -1, sizeof(dp));
34+
lis(n, a, ans);
35+
return ans;
36+
}
37+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution
2+
{
3+
public:
4+
string longestPalindrome(string S)
5+
{
6+
string T = string(S.rbegin(), S.rend());
7+
int maxi = 0;
8+
string res;
9+
int n = S.length();
10+
int dp[n + 1][n + 1];
11+
for (int i = 0; i <= n; ++i)
12+
{
13+
for (int j = 0; j <= n; ++j)
14+
{
15+
if (i == 0 || j == 0)
16+
{
17+
dp[i][j] = 0;
18+
}
19+
else if (S[i - 1] == T[j - 1])
20+
{
21+
dp[i][j] = 1 + dp[i - 1][j - 1];
22+
if (dp[i][j] > maxi)
23+
{
24+
string temp = S.substr(i - dp[i][j], dp[i][j]);
25+
string rev = string(temp.rbegin(), temp.rend());
26+
if (temp == rev)
27+
{
28+
res = temp;
29+
maxi = dp[i][j];
30+
}
31+
}
32+
}
33+
else
34+
{
35+
dp[i][j] = 0;
36+
}
37+
}
38+
}
39+
return res;
40+
}
41+
};
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution
2+
{
3+
public:
4+
int longestSubsequence(int N, int A[])
5+
{
6+
int res = 0;
7+
8+
int dp[N] = {0};
9+
10+
for (int i = 0; i < N; i++)
11+
{
12+
dp[i] = 1;
13+
14+
for (int j = 0; j < i; j++)
15+
{
16+
if (abs(A[j] - A[i]) == 1)
17+
{
18+
dp[i] = max(dp[i], dp[j] + 1);
19+
}
20+
}
21+
22+
res = max(res, dp[i]);
23+
}
24+
25+
return res;
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution
2+
{
3+
public:
4+
int maximumPath(int N, vector<vector<int>> mat)
5+
{
6+
int dp[N + 1][N + 1];
7+
int ans = 0;
8+
for (int i = 0; i <= N; ++i)
9+
{
10+
for (int j = 0; j <= N; ++j)
11+
{
12+
if (i == 0 || j == 0)
13+
{
14+
dp[i][j] = 0;
15+
}
16+
else
17+
{
18+
dp[i][j] = mat[i - 1][j - 1] + max({dp[i - 1][j - 1], dp[i - 1][j], dp[i - 1][j + 1]});
19+
}
20+
ans = max(dp[i][j], ans);
21+
}
22+
}
23+
return ans;
24+
}
25+
};
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution
2+
{
3+
public:
4+
// Function to find the maximum number of meetings that can
5+
// be performed in a meeting room.
6+
int maxMeetings(int start[], int end[], int n)
7+
{
8+
vector<pair<int, int>> vec;
9+
for (int i = 0; i < n; ++i)
10+
{
11+
vec.push_back({start[i], end[i]});
12+
}
13+
sort(vec.begin(), vec.end(),
14+
[](const pair<int, int> &a, const pair<int, int> &b)
15+
{
16+
return a.second < b.second;
17+
});
18+
19+
int ans = 1;
20+
int prev = vec[0].second;
21+
for (int i = 1; i < n; ++i)
22+
{
23+
if (vec[i].first > prev)
24+
{
25+
ans++;
26+
prev = vec[i].second;
27+
}
28+
}
29+
return ans;
30+
}
31+
};

0 commit comments

Comments
 (0)