- Related Questions & Answers
- Maximum Profit in Job Scheduling in C++
- Program to find the maximum profit we can get by buying on stock market once in Python
- Program to find the maximum profit we can get by buying on stock market multiple times in Python
- Program to find maximum profit we can get by buying and selling stocks with a fee in Python?
- Program to find maximum profit we can make by buying and selling stocks in Python?
- Find Jobs involved in Weighted Job Scheduling in C++
- Program to find maximum profit by cutting the rod of different length in C++
- Program to find maximum credit we can get by finishing some assignments in python
- Program to find maximum profit we can make after k Buy and Sell in python
- Maximum profit by buying and selling a share at most twice
- Program to get maximum value of power of a list by rearranging elements in Python
- Program to find maximum profit after buying and selling stocks at most two times in python
- Program to find maximum price we can get by holding items into a bag in Python
- Program to find maximum value we can get in knapsack problem by taking multiple copies in Python
- Program to find maximum additive score by deleting numbers in Python

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Suppose we have a list of intervals where each interval contains three values [start, end, profit]. We can perform only one task at a time, we have to find the most amount of profit we can get.

So, if the input is like intervals = [[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]], then the output will be 350, as we can take these two intervals [1, 2, 100] and [2, 100, 250]

To solve this, we will follow these steps

- d := an empty map that contains lists as values
- n := 0
- for each (start, end, profit) in intervals, do
- if end > n, then
- n := end

- if end > n, then
- insert pair (start, end) into d[end]
- A := a list of size n + 1 and fill with 0
- for end in range 0 to size of A, do
- if end is in d, then
- for each (start, profit) pair in d[end], do
- A[end] := maximum of A[end], (A[start] + profit) and A[end - 1]

- for each (start, profit) pair in d[end], do
- otherwise,
- A[end] := A[end - 1]

- if end is in d, then
- return last value of A

Let us see the following implementation to get better understanding −

from collections import defaultdict class Solution: def solve(self, intervals): d = defaultdict(list) n = 0 for start, end, profit in intervals: if end > n: n = end d[end].append([start, profit]) A = [0 for i in range(n + 1)] for end in range(len(A)): if end in d: for start, profit in d[end]: A[end] = max(A[end], A[start] + profit, A[end - 1]) else: A[end] = A[end - 1] return A[-1] ob = Solution() intervals = [[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]] print(ob.solve(intervals))

[[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]]

350

Advertisements