-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclosestSubsequenceSum.py
More file actions
30 lines (26 loc) · 905 Bytes
/
closestSubsequenceSum.py
File metadata and controls
30 lines (26 loc) · 905 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# Source: https://leetcode.com/problems/closest-subsequence-sum/
# Author: Miao Zhang
# Date: 2021-06-03
class Solution:
def minAbsDifference(self, nums: List[int], goal: int) -> int:
def dfs(i,cur,arr,sums):
if i==len(arr):
sums.add(cur)
return
dfs(i + 1, cur, arr,sums)
dfs(i + 1, cur + arr[i], arr, sums)
sums1, sums2 = set(), set()
dfs(0, 0, nums[: len(nums)//2], sums1)
dfs(0, 0, nums[len(nums)//2:], sums2)
s2 = sorted(sums2)
res = abs(goal)
for s in sums1:
remain = goal - s
i2= bisect_left(s2, remain)
if i2 < len(s2):
res = min(res,abs(remain-s2[i2]))
if i2>0:
res = min(res,abs(remain-s2[i2 - 1]))
return res