Find all combinations of 4 elements whose sum equals a target in Python
up vote
0
down vote
favorite
I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
If there is better way for me to do it? it seems like the performace for the following code is too bad.
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
if len(nums) <= 3:return
res, col = ,
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target and check not in col:
res.append(list(i))
col.append(check)
return res
python python-3.x programming-challenge k-sum
add a comment |
up vote
0
down vote
favorite
I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
If there is better way for me to do it? it seems like the performace for the following code is too bad.
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
if len(nums) <= 3:return
res, col = ,
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target and check not in col:
res.append(list(i))
col.append(check)
return res
python python-3.x programming-challenge k-sum
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
If there is better way for me to do it? it seems like the performace for the following code is too bad.
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
if len(nums) <= 3:return
res, col = ,
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target and check not in col:
res.append(list(i))
col.append(check)
return res
python python-3.x programming-challenge k-sum
I wrote a solution to find all combinations of 4 elements from a list whose sum of elements equals some target
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
If there is better way for me to do it? it seems like the performace for the following code is too bad.
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
if len(nums) <= 3:return
res, col = ,
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target and check not in col:
res.append(list(i))
col.append(check)
return res
python python-3.x programming-challenge k-sum
python python-3.x programming-challenge k-sum
edited 49 mins ago
200_success
128k15149412
128k15149412
asked 1 hour ago
A.Lee
261
261
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.
When using sets, most of the complexity comes from the combinations function.
Here are the results of a time test on your code
res1 = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.3020472526550293
The results of a method using only sets
res = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.1206510066986084
Code for the second function
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
res = set()
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target:
res.add(i)
return list([list(x) for x in res])
New contributor
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.
When using sets, most of the complexity comes from the combinations function.
Here are the results of a time test on your code
res1 = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.3020472526550293
The results of a method using only sets
res = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.1206510066986084
Code for the second function
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
res = set()
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target:
res.add(i)
return list([list(x) for x in res])
New contributor
add a comment |
up vote
0
down vote
Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.
When using sets, most of the complexity comes from the combinations function.
Here are the results of a time test on your code
res1 = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.3020472526550293
The results of a method using only sets
res = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.1206510066986084
Code for the second function
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
res = set()
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target:
res.add(i)
return list([list(x) for x in res])
New contributor
add a comment |
up vote
0
down vote
up vote
0
down vote
Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.
When using sets, most of the complexity comes from the combinations function.
Here are the results of a time test on your code
res1 = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.3020472526550293
The results of a method using only sets
res = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.1206510066986084
Code for the second function
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
res = set()
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target:
res.add(i)
return list([list(x) for x in res])
New contributor
Lists are pretty inefficient for this type of thing. The majority of the complexity is from iterating over the lists and comparing contents. Sets use a hash for their content, reducing complexity.
When using sets, most of the complexity comes from the combinations function.
Here are the results of a time test on your code
res1 = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.3020472526550293
The results of a method using only sets
res = Solution().fourSum(range(-25,25),0)
print(time.time() - start)
# 0.1206510066986084
Code for the second function
class Solution:
def fourSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[List[int]]
"""
from itertools import combinations
res = set()
for i in combinations(nums, 4):
check = set(i)
if sum(i) == target:
res.add(i)
return list([list(x) for x in res])
New contributor
New contributor
answered 2 mins ago
Noah B. Johnson
11
11
New contributor
New contributor
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209410%2ffind-all-combinations-of-4-elements-whose-sum-equals-a-target-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown