Skip to content

Commit 6c63935

Browse files
committed
t status
:Merge branch 'master' of https://github.com/yennanliu/CS_basics
2 parents 4b81b38 + 8b912e9 commit 6c63935

File tree

4 files changed

+113
-7
lines changed

4 files changed

+113
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -981,7 +981,7 @@
981981
375| [Guess Number Higher or Lower II](https://leetcode.com/problems/guess-number-higher-or-lower-ii/)| [Python](./leetcode_python//Dynamic_Programming/guess-number-higher-or-lower-ii.py) | _O(n^2)_ | _O(n^2)_ | Medium | | AGAIN (not start)
982982
377| [Combination Sum IV](https://leetcode.com/problems/combination-sum-iv/)| [Python](./leetcode_python//Dynamic_Programming/combination-sum-iv.py) | _O(nlogn + n * t)_| _O(t)_ | Medium |Curated Top 75, AGAIN, dp basic ,`fb`| AGAIN******** (3)
983983
403| [Frog Jump](https://leetcode.com/problems/frog-jump/)| [Python](./leetcode_python//Dynamic_Programming/frog-jump.py) | _O(nlogn + n * t)_| _O(t)_ | Hard |dfs, bfs, Memoization dfs, dp, amazon, tik-tok, m$| AGAIN (not start)
984-
416 | [Partition Equal Subset Sum](https://leetcode.com/problems/partition-equal-subset-sum/) | [Python](./leetcode_python//Dynamic_Programming/partition-equal-subset-sum.py) | _O(n * s)_ | _O(s)_ | Medium || AGAIN (not start)
984+
416 | [Partition Equal Subset Sum](https://leetcode.com/problems/partition-equal-subset-sum/) | [Python](./leetcode_python//Dynamic_Programming/partition-equal-subset-sum.py) | _O(n * s)_ | _O(s)_ | Medium |dp, fb, google, apple, amazon| AGAIN** (not start) (1)
985985
418 | [Sentence Screen Fitting](https://leetcode.com/problems/sentence-screen-fitting/) | [Python](./leetcode_python//Dynamic_Programming/sentence-screen-fitting.py) | _O(r + n * c)_ | _O(n)_ | Medium |🔒, `dp`, `google`| AGAIN (not start)
986986
467 | [Unique Substrings in Wraparound String](https://leetcode.com/problems/unique-substrings-in-wraparound-string/) | [Python](./leetcode_python//Dynamic_Programming/unique-substrings-in-wraparound-string.py) | _O(n)_ | _O(1)_ | Medium || AGAIN (not start)
987987
471 | [Encode String with Shortest Length](https://leetcode.com/problems/encode-string-with-shortest-length/) | [Python](./leetcode_python//Dynamic_Programming/encode-string-with-shortest-length.py) | _O(n^3)_ on average | _O(n^2)_ | Medium |🔒, `dp`, `google`| AGAIN (not start)

doc/cheatsheet/bit_manipulation.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- ref
1313
- [bit_manipulation.md](https://github.com/yennanliu/CS_basics/blob/master/doc/bit_manipulation.md)
1414
- [python-operators.html](https://www.runoob.com/python/python-operators.html)
15+
- [leetcode-easy-bitwise-xor-summary](https://steveyang.blog/2022/07/02/leetcode-easy-bitwise-xor-summary/)
1516

1617
<p align="center"><img src ="https://github.com/yennanliu/CS_basics/blob/master/doc/pic/bit_basic1.png" ></p>
1718
<p align="center"><img src ="https://github.com/yennanliu/CS_basics/blob/master/doc/pic/bit_basic2.png" ></p>

doc/progress.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Progress
22

3-
# 2022-07-02
3+
# 2022-07-03
44
- ================
55
- leetcode_company_V5/LC-goog.pdf
66
-
@@ -127,7 +127,6 @@
127127
- 114
128128
- 221
129129
- 337
130-
- 416
131130
- 437
132131
- ================
133132
- LC general

leetcode_python/Dynamic_Programming/partition-equal-subset-sum.py

Lines changed: 110 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,113 @@
1+
"""
2+
3+
416. Partition Equal Subset Sum
4+
Medium
5+
6+
Given a non-empty array nums containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.
7+
8+
9+
10+
Example 1:
11+
12+
Input: nums = [1,5,11,5]
13+
Output: true
14+
Explanation: The array can be partitioned as [1, 5, 5] and [11].
15+
Example 2:
16+
17+
Input: nums = [1,2,3,5]
18+
Output: false
19+
Explanation: The array cannot be partitioned into equal sum subsets.
20+
21+
22+
Constraints:
23+
24+
1 <= nums.length <= 200
25+
1 <= nums[i] <= 100
26+
27+
"""
28+
129
# VO
230

3-
# V1
31+
# V1
32+
# IDEA : brute force (TLE)
33+
# https://leetcode.com/problems/partition-equal-subset-sum/solution/
34+
class Solution:
35+
def canPartition(self, nums: List[int]) -> bool:
36+
def dfs(nums: List[int], n: int, subset_sum: int) -> bool:
37+
# Base cases
38+
if subset_sum == 0:
39+
return True
40+
if n == 0 or subset_sum < 0:
41+
return False
42+
result = (dfs(nums, n - 1, subset_sum - nums[n - 1])
43+
or dfs(nums, n - 1, subset_sum))
44+
return result
45+
46+
# find sum of array elements
47+
total_sum = sum(nums)
48+
49+
# if total_sum is odd, it cannot be partitioned into equal sum subsets
50+
if total_sum % 2 != 0:
51+
return False
52+
53+
subset_sum = total_sum // 2
54+
n = len(nums)
55+
return dfs(nums, n - 1, subset_sum)
56+
57+
# V1'
58+
# IDEA : Top Down Dynamic Programming - Memoization
59+
# https://leetcode.com/problems/partition-equal-subset-sum/solution/
60+
class Solution:
61+
def canPartition(self, nums: List[int]) -> bool:
62+
@lru_cache(maxsize=None)
63+
def dfs(nums: Tuple[int], n: int, subset_sum: int) -> bool:
64+
# Base cases
65+
if subset_sum == 0:
66+
return True
67+
if n == 0 or subset_sum < 0:
68+
return False
69+
result = (dfs(nums, n - 1, subset_sum - nums[n - 1])
70+
or dfs(nums, n - 1, subset_sum))
71+
return result
72+
73+
# find sum of array elements
74+
total_sum = sum(nums)
75+
76+
# if total_sum is odd, it cannot be partitioned into equal sum subsets
77+
if total_sum % 2 != 0:
78+
return False
79+
80+
subset_sum = total_sum // 2
81+
n = len(nums)
82+
return dfs(tuple(nums), n - 1, subset_sum)
83+
84+
# V1''
85+
# IDEA : Bottom Up Dynamic Programming
86+
# https://leetcode.com/problems/partition-equal-subset-sum/solution/
87+
class Solution:
88+
def canPartition(self, nums: List[int]) -> bool:
89+
# find sum of array elements
90+
total_sum = sum(nums)
91+
92+
# if total_sum is odd, it cannot be partitioned into equal sum subsets
93+
if total_sum % 2 != 0:
94+
return False
95+
subset_sum = total_sum // 2
96+
n = len(nums)
97+
98+
# construct a dp table of size (n+1) x (subset_sum + 1)
99+
dp = [[False] * (subset_sum + 1) for _ in range(n + 1)]
100+
dp[0][0] = True
101+
for i in range(1, n + 1):
102+
curr = nums[i - 1]
103+
for j in range(subset_sum + 1):
104+
if j < curr:
105+
dp[i][j] = dp[i - 1][j]
106+
else:
107+
dp[i][j] = dp[i - 1][j] or dp[i - 1][j - curr]
108+
return dp[n][subset_sum]
109+
110+
# V1'''
4111
# https://blog.csdn.net/fuxuemingzhu/article/details/79787425
5112
# DFS
6113
class Solution:
@@ -24,7 +131,7 @@ def dfs(self, nums, index, target):
24131
target[i] += nums[index]
25132
return False
26133

27-
# V1'
134+
# V1'''''
28135
# https://blog.csdn.net/fuxuemingzhu/article/details/79787425
29136
# dp[j] = dp[j] || dp[j - nums[i]]
30137
class Solution(object):
@@ -44,7 +151,6 @@ def canPartition(self, nums):
44151
# V2
45152
# Time: O(n * s), s is the sum of nums
46153
# Space: O(s)
47-
48154
class Solution(object):
49155
def canPartition(self, nums):
50156
"""
@@ -61,4 +167,4 @@ def canPartition(self, nums):
61167
for i in reversed(xrange(1, len(dp))):
62168
if num <= i:
63169
dp[i] = dp[i] or dp[i - num]
64-
return dp[-1]
170+
return dp[-1]

0 commit comments

Comments
 (0)