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
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
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
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
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
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
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
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
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
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered 2 mins ago
Noah B. Johnson
11
11
New contributor
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Noah B. Johnson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
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