Skip to content

Commit 5d8fd0a

Browse files
authored
feat: add python solution to lc problem: No.1755 (doocs#804)
No.1755.Closest Subsequence Sum
1 parent d44614a commit 5d8fd0a

File tree

3 files changed

+94
-0
lines changed

3 files changed

+94
-0
lines changed

solution/1700-1799/1755.Closest Subsequence Sum/README.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,38 @@
5959
<!-- 这里可写当前语言的特殊实现逻辑 -->
6060

6161
```python
62+
class Solution:
63+
def minAbsDifference(self, nums: List[int], goal: int) -> int:
64+
n = len(nums)
65+
left = set()
66+
right = set()
6267

68+
self.getSubSeqSum(0, 0, nums[:n // 2], left)
69+
self.getSubSeqSum(0, 0, nums[n // 2:], right)
70+
71+
result = float('inf')
72+
right = sorted(right)
73+
rl = len(right)
74+
75+
for l in left:
76+
remaining = goal - l
77+
idx = bisect_left(right, remaining)
78+
79+
if idx < rl:
80+
result = min(result, abs(remaining - right[idx]))
81+
82+
if idx > 0:
83+
result = min(result, abs(remaining - right[idx - 1]))
84+
85+
return result
86+
87+
def getSubSeqSum(self, i: int, curr: int, arr: List[int], result: Set[int]):
88+
if i == len(arr):
89+
result.add(curr)
90+
return
91+
92+
self.getSubSeqSum(i + 1, curr, arr, result)
93+
self.getSubSeqSum(i + 1, curr + arr[i], arr, result)
6394
```
6495

6596
### **Java**

solution/1700-1799/1755.Closest Subsequence Sum/README_EN.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,38 @@ The absolute difference is abs(-4 - (-5)) = abs(1) = 1, which is the minimum.
5454
### **Python3**
5555

5656
```python
57+
class Solution:
58+
def minAbsDifference(self, nums: List[int], goal: int) -> int:
59+
n = len(nums)
60+
left = set()
61+
right = set()
5762

63+
self.getSubSeqSum(0, 0, nums[:n // 2], left)
64+
self.getSubSeqSum(0, 0, nums[n // 2:], right)
65+
66+
result = float('inf')
67+
right = sorted(right)
68+
rl = len(right)
69+
70+
for l in left:
71+
remaining = goal - l
72+
idx = bisect_left(right, remaining)
73+
74+
if idx < rl:
75+
result = min(result, abs(remaining - right[idx]))
76+
77+
if idx > 0:
78+
result = min(result, abs(remaining - right[idx - 1]))
79+
80+
return result
81+
82+
def getSubSeqSum(self, i: int, curr: int, arr: List[int], result: Set[int]):
83+
if i == len(arr):
84+
result.add(curr)
85+
return
86+
87+
self.getSubSeqSum(i + 1, curr, arr, result)
88+
self.getSubSeqSum(i + 1, curr + arr[i], arr, result)
5889
```
5990

6091
### **Java**
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution:
2+
def minAbsDifference(self, nums: List[int], goal: int) -> int:
3+
n = len(nums)
4+
left = set()
5+
right = set()
6+
7+
self.getSubSeqSum(0, 0, nums[:n // 2], left)
8+
self.getSubSeqSum(0, 0, nums[n // 2:], right)
9+
10+
result = float('inf')
11+
right = sorted(right)
12+
rl = len(right)
13+
14+
for l in left:
15+
remaining = goal - l
16+
idx = bisect_left(right, remaining)
17+
18+
if idx < rl:
19+
result = min(result, abs(remaining - right[idx]))
20+
21+
if idx > 0:
22+
result = min(result, abs(remaining - right[idx - 1]))
23+
24+
return result
25+
26+
def getSubSeqSum(self, i: int, curr: int, arr: List[int], result: Set[int]):
27+
if i == len(arr):
28+
result.add(curr)
29+
return
30+
31+
self.getSubSeqSum(i + 1, curr, arr, result)
32+
self.getSubSeqSum(i + 1, curr + arr[i], arr, result)

0 commit comments

Comments
 (0)