Leetcode # 494. Target Sum
- 2024.12.26
- ★★ Medium LeetCode Optimized Space Complexity Queue Tabulation
Problem
https://leetcode.com/problems/target-sum
First Try
[Time Limit Exceeded 124 / 140 testcases passed]
Time Complexity: O(2 ** len(nums))
Space Complexity: O(2 ** len(nums))
(The input and output generally do not count towards the space complexity.)
class Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: rest_sum = [nums[-1]] * (len(nums) - 1) for i in range(len(rest_sum) - 2, -1, -1): rest_sum[i] = nums[i + 1] + rest_sum[i + 1] expressions_n = 0 queue = deque([[0, 0]]) while queue: i, pre_sum = queue.popleft() for symbol in [1, -1]: cur_sum = pre_sum + symbol * nums[i] if i == len(nums) - 1: if cur_sum == target: expressions_n += 1 continue # 打ち切り法 distance = abs(cur_sum - target) if (distance - rest_sum[i]) * (1 if distance >= 0 else -1) > 0: continue queue.append([i + 1, cur_sum]) return expressions_n
Solution: Tabulation
Time Complexity: O(len(nums) * sum(nums))
Space Complexity: O(len(nums) * sum(nums))
(The input and output generally do not count towards the space complexity.)
class Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: ans = defaultdict(Counter) ans[len(nums) - 1][ nums[-1]] += 1 ans[len(nums) - 1][-nums[-1]] += 1 for i in range(len(nums) - 2, -1, -1): for n in ans[i + 1]: ans[i][n + nums[i]] += ans[i + 1][n] ans[i][n - nums[i]] += ans[i + 1][n] return ans[0][target]
Solution: Tabulation (Optimized Space Complexity)
Time Complexity: O(len(nums) * sum(nums))
Space Complexity: O(len(nums) * sum(nums))
(The input and output generally do not count towards the space complexity.)
class Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: pre = Counter([nums[-1], -nums[-1]]) for i in range(len(nums) - 1): cur = Counter() for n in pre: cur[n + nums[i]] += pre[n] cur[n - nums[i]] += pre[n] pre = cur return pre[target]
Last Updated on 2024/12/26 by A1go