Skip to content

feat(translation):Added translation for 454 #381

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jun 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 1 addition & 16 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ The data structures mainly include:

![198.house-robber](./assets/problems/198.house-robber.png)

[0454.4-sum-ii](./problems/454.4-sum-ii.md):
[0454.4-sum-ii](./problems/454.4-sum-ii.en.md):

![454.4-sum-ii](./assets/problems/454.4-sum-ii.png)

Expand All @@ -111,10 +111,6 @@ The data structures mainly include:

> Here only lists some **representative problems** but not all.

<<<<<<< HEAD

=======
>>>>>>> upstream/master
#### Easy (Translation in Progress)
- [0001.TwoSum](./problems/1.TwoSum.en.md)🆕✅
- [0020.Valid Parentheses](./problems/20.validParentheses.md)
Expand Down Expand Up @@ -174,11 +170,7 @@ The data structures mainly include:
- [0062.unique-paths](./problems/62.unique-paths.md)
- [0073.set-matrix-zeroes](./problems/73.set-matrix-zeroes.md)
- [0075.sort-colors](./problems/75.sort-colors.md)
<<<<<<< HEAD
- [0078.subsets](./problems/78.subsets.md)
=======
- [0078.subsets](./problems/78.subsets-en.md)✅
>>>>>>> upstream/master
- [0079.word-search](./problems/79.word-search-en.md) ✅
- [0086.partition-list](./problems/86.partition-list.md)
- [0090.subsets-ii](./problems/90.subsets-ii-en.md)✅
Expand Down Expand Up @@ -224,10 +216,7 @@ The data structures mainly include:
- [0516.longest-palindromic-subsequence](./problems/516.longest-palindromic-subsequence.md)
- [0518.coin-change-2](./problems/518.coin-change-2.md)
- [0547.friend-circles](./problems/547.friend-circles-en.md) 🆕✅
<<<<<<< HEAD
=======
- [0560.subarray-sum-equals-k](./problems/560.subarray-sum-equals-k.en.md) ✅
>>>>>>> upstream/master
- [0609.find-duplicate-file-in-system](./problems/609.find-duplicate-file-in-system.md)
- [0875.koko-eating-bananas](./problems/875.koko-eating-bananas.md)
- [0877.stone-game](./problems/877.stone-game.md)
Expand All @@ -240,10 +229,6 @@ The data structures mainly include:
- [1371.find-the-longest-substring-containing-vowels-in-even-counts](./problems/1371.find-the-longest-substring-containing-vowels-in-even-counts.en.md) 🆕✅


<<<<<<< HEAD

=======
>>>>>>> upstream/master
#### Hard (Translation in Progress)

- [0004.median-of-two-sorted-array](./problems/4.median-of-two-sorted-array.md) 🆕
Expand Down
100 changes: 100 additions & 0 deletions problems/454.4-Sum-ii.en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@


## Problem Address
https://leetcode.com/problems/4sum-ii/description/

## Problem Description

```
Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such that A[i] + B[j] + C[k] + D[l] is zero.

To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500. All integers are in the range of -228 to 228 - 1 and the result is guaranteed to be at most 231 - 1.

Example:

Input:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]

Output:
2

Explanation:
The two tuples are:
1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
```
## Solution

The normal solution to complete the search would require four rounds of traversal, and that would make the time complexity reaches O(n^4), which doesn't work obviously. We have to figure out a more effective algorithm.

My idea is to separate these four lists into two groups and combine them two by two. We then calculate separately `all the sums from these two groups, and the relevant counts`

As the picture shows:

![454.4-sum-ii](../assets/problems/454.4-sum-ii.png)


Now that we got two `hashTable`, and the result would appear with some basic calculations.

## Key Point Analysis
- Less time by more space.
- Divide the lists by 2, and calculate all the possible sums from two groups, then combine the result.

## Code

Language Support: `JavaScript`,`Python3`

`JavaScript`:
```js

/*
* @lc app=leetcode id=454 lang=javascript
*
* [454] 4Sum II
*
* https://leetcode.com/problems/4sum-ii/description/
/**
* @param {number[]} A
* @param {number[]} B
* @param {number[]} C
* @param {number[]} D
* @return {number}
*/
var fourSumCount = function(A, B, C, D) {
const sumMapper = {};
let res = 0;
for (let i = 0; i < A.length; i++) {
for (let j = 0; j < B.length; j++) {
sumMapper[A[i] + B[j]] = (sumMapper[A[i] + B[j]] || 0) + 1;
}
}

for (let i = 0; i < C.length; i++) {
for (let j = 0; j < D.length; j++) {
res += sumMapper[- (C[i] + D[j])] || 0;
}
}

return res;
};
```

`Python3`:

```python
class Solution:
def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
mapper = {}
res = 0
for i in A:
for j in B:
mapper[i + j] = mapper.get(i + j, 0) + 1

for i in C:
for j in D:
res += mapper.get(-1 * (i + j), 0)
return res
```