Skip to content

Commit 481b4c3

Browse files
committed
[main] Added files
1 parent a39d1b9 commit 481b4c3

File tree

8 files changed

+208
-0
lines changed

8 files changed

+208
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from typing import List
2+
3+
4+
## problem1
5+
cost_memo = {}
6+
def max_rod_price_cost(n_len: int, prices: List[int], cost: int) -> int:
7+
if n_len == 0:
8+
return 0
9+
if (n_len - 1) in cost_memo:
10+
return cost_memo[n_len - 1]
11+
max_cost = prices[n_len - 1] - cost
12+
for i in range(1, n_len):
13+
max_cost = max(max_cost, prices[n_len - 1], (prices[i] + max_rod_price_cost(n_len - i, prices, cost)) - cost)
14+
cost_memo[n_len] = max_cost
15+
return max_cost
16+
17+
## problem2
18+
def lengthOfLIS(self, nums: List[int]) -> int:
19+
dp = [1] * len(nums)
20+
n = len(nums) - 1
21+
dp[n] = 1
22+
for i in range(len(nums) - 1, -1, -1):
23+
for j in range(i + 1, len(nums)):
24+
dp[i] = max(dp[i], 1 + dp[j] if nums[i] < nums[j] else 0)
25+
return max(dp)
26+

pythonProblems/leetcode/hw4/blutarsky.py

Whitespace-only changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
from typing import List
3+
4+
5+
class Solution:
6+
def stockec(self, prices: List[int]):
7+
pass
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
from typing import List
3+
4+
### problem4
5+
class Solution:
6+
def maxProfit(self, prices: List[int]):
7+
## start at back, and compute greatest stock value on kth day
8+
min_amount = prices[0]
9+
max_profit = 0
10+
for i in range(len(prices) - 1):
11+
min_amount = min(min_amount, prices[i])
12+
max_profit = max(max_profit, prices[i] - min_amount)
13+
return max_profit
14+
15+
16+
if __name__ == '__main__':
17+
prices = [7,1,5,3,6,4]
18+
sol = Solution()
19+
print(sol.maxProfit(prices))
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import List
2+
3+
## problem 2
4+
class Solution:
5+
def lengthOfLIS(self, nums: List[int]) -> int:
6+
dp = [1] * len(nums)
7+
n = len(nums) - 1
8+
dp[n] = 1
9+
for i in range(len(nums) - 1, -1, -1):
10+
for j in range(i + 1, len(nums)):
11+
dp[i] = max(dp[i], 1 + dp[j] if nums[i] < nums[j] else 0)
12+
return max(dp)
13+
14+
15+
if __name__ == '__main__':
16+
l = Solution()
17+
print(l.lengthOfLIS([7,7,7,7,7,7,7]))
18+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def longestValidParentheses(self, paren: str) -> int:
3+
stack = []
4+
longest = 0
5+
curr_len = 0
6+
for elem in paren:
7+
if elem == '(':
8+
stack.append('(')
9+
elif elem == ')':
10+
if len(stack) == 0:
11+
longest = max(curr_len, longest)
12+
curr_len = 0
13+
else:
14+
stack.pop()
15+
curr_len += 2
16+
if len(stack) == 0:
17+
longest = max(longest, curr_len)
18+
curr_len = 0
19+
longest = max(longest, curr_len)
20+
return longest
21+
22+
23+
if __name__ == '__main__':
24+
sol = Solution()
25+
print(sol.longestValidParentheses(")()())"))
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
2+
import time
3+
from typing import List
4+
5+
memo = {}
6+
7+
def modifiedRodCut(n: int, prices: List[int], costs: List[int], ind = 0) -> int:
8+
"""
9+
Modified rod cut algorithm
10+
11+
Args:
12+
n (int): The rod length
13+
costs (List[int]): The array of costs
14+
15+
Returns:
16+
int: The maximum revenue from cutting rod of length n
17+
"""
18+
if ind == n:
19+
memo[ind] = prices[n]
20+
return prices[n]
21+
return max(prices[ind] - costs[ind], modifiedRodCut(n - (ind + 1), prices, costs, ind + 1))
22+
23+
24+
max_price_memo = {}
25+
def max_rod_price(n_len: int, prices: List[int]) -> int:
26+
max_price = prices[n_len]
27+
if n_len in max_price_memo:
28+
return max_price_memo[n_len]
29+
if n_len <= 1:
30+
max_price_memo[n_len] = prices[n_len]
31+
return prices[n_len]
32+
for i in range(1, n_len):
33+
max_price = max(max_price, max_rod_price(i, prices) + max_rod_price(n_len - i, prices))
34+
max_price_memo[n_len] = max_price
35+
return max_price
36+
37+
def text_cut_rod(n, text_prices):
38+
if n == 0:
39+
return 0
40+
q = float('-inf')
41+
for i in range(1, n + 1):
42+
q = max(q, text_prices[i] + text_cut_rod(n - i, text_prices))
43+
return q
44+
45+
### Problem 1
46+
cost_memo = {}
47+
def max_rod_price_cost(n_len: int, prices: List[int], cost: int) -> int:
48+
if n_len == 0:
49+
return 0
50+
if (n_len - 1) in cost_memo:
51+
return cost_memo[n_len - 1]
52+
max_cost = prices[n_len - 1] - cost
53+
for i in range(1, n_len):
54+
max_cost = max(max_cost, prices[n_len - 1], (prices[i] + max_rod_price_cost(n_len - i, prices, cost)) - cost)
55+
cost_memo[n_len] = max_cost
56+
return max_cost
57+
### Problem 1
58+
59+
60+
if __name__ == '__main__':
61+
PRICES = [1, 2, 4, 5, 6, 4, 7, 2, 5, 5]
62+
print(max_rod_price_cost(9, PRICES, 2))
63+
64+
65+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
6+
def find_successor(self, nums: List[int], val: int) -> int:
7+
sorted_nums = sorted([x for x in set(nums + [val])])
8+
ind_ = sorted_nums.index(val)
9+
if ind_ == len(sorted_nums) - 1:
10+
## no successor, return -1
11+
return -1
12+
return sorted_nums[ind_ + 1]
13+
14+
def nextPermutation(self, nums: List[int]) -> None:
15+
print('arr = ', nums)
16+
if sorted(nums)[::-1] == nums:
17+
## return to default
18+
nums[:] = sorted(nums)
19+
else:
20+
for i in range(1, len(nums)):
21+
sorted_section = sorted(nums[i:])[::-1]
22+
if sorted_section == nums[i:]:
23+
## swap second max with one before, find successor of previous index and replace
24+
successor = Solution.find_successor(self, sorted_section, nums[i - 1])
25+
successor_ind = sorted_section.index(successor)
26+
nums[i - 1], nums[i:] = successor, sorted(sorted_section[:successor_ind] + [nums[i - 1]] + sorted_section[successor_ind + 1:])
27+
return None
28+
for j in range(len(nums) - 1, -1, -1):
29+
if nums[j] > nums[j - 1]:
30+
nums[j - 1], nums[j] = nums[j], nums[j - 1]
31+
return None
32+
33+
34+
if __name__ == '__main__':
35+
arr = [1, 3, 2]
36+
arr2 = [1,2,3, 4, 5]
37+
arr3 = [1,1,5]
38+
arr4 = [3,2,1]
39+
arr5 = [1, 2]
40+
arr6 = [2,3,1]
41+
arr7 = [5,4,7,5,3,2]
42+
arr8 = [2,2,7,5,4,3,2,2,1]
43+
arr9 = [1,5,1]
44+
sol = Solution()
45+
for eacharr in [arr, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9]:
46+
sol.nextPermutation(eacharr)
47+
for eacharr in [arr, arr2, arr3, arr4, arr5, arr6, arr7, arr8, arr9]:
48+
print(eacharr)

0 commit comments

Comments
 (0)