Python 解读列表中TwoSum及FourSum问题
2018-02-27 10:19
573 查看
1.求解列表中的两元素和,原题为letcode习题:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解答:此题简单处理列表中两元素和等于目标数并输出索引值列表,不考虑顺序问题,则做列表遍历即可完成:
错误解法:
def add(target, list1):
console = []
for a in list1:
ans = []
if target-a in list1:
ans.append(list1.index(a)) # 没有考虑如果列表中有重复元素,如:[1, 0, -1, 0, -2, 2],取不到后面重复元素的index值
ans.append(list1.index(target-a))
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)执行结果:add(1, [1, 0, -1, 0, -2, 2])
[[0, 1], [2, 5]]仔细分析,这个结果不完整,所以在使用list.index(value)时,必须要考虑重复的列表元素,完整解法:enumerate()返回index和value列表对象:def add(target, list1):
console = []
for i in range(len(list1)):
if target-list1[i] in list1:
for item in enumerate(list1):
ans = []
if item[1] == target-list1[i]:
ans.append(i)
ans.append(item[0])
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)
if __name__ == '__main__':
add(1, [1, 0, -1, 0, -2, 2])
# 结果:
[[0, 1], [0, 3], [2, 5]]2.FourSum问题
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
four_sum(0, [1, 0, -1, 0, -2, 2])
#结果:
[[1, 0, -1, 0], [1, -1, -2, 2], [0, 0, -2, 2]]
这里也要考虑列表中元素重复的问题,只能用index取value,不能用value求index,或造成错误。
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解答:此题简单处理列表中两元素和等于目标数并输出索引值列表,不考虑顺序问题,则做列表遍历即可完成:
错误解法:
def add(target, list1):
console = []
for a in list1:
ans = []
if target-a in list1:
ans.append(list1.index(a)) # 没有考虑如果列表中有重复元素,如:[1, 0, -1, 0, -2, 2],取不到后面重复元素的index值
ans.append(list1.index(target-a))
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)执行结果:add(1, [1, 0, -1, 0, -2, 2])
[[0, 1], [2, 5]]仔细分析,这个结果不完整,所以在使用list.index(value)时,必须要考虑重复的列表元素,完整解法:enumerate()返回index和value列表对象:def add(target, list1):
console = []
for i in range(len(list1)):
if target-list1[i] in list1:
for item in enumerate(list1):
ans = []
if item[1] == target-list1[i]:
ans.append(i)
ans.append(item[0])
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)
if __name__ == '__main__':
add(1, [1, 0, -1, 0, -2, 2])
# 结果:
[[0, 1], [0, 3], [2, 5]]2.FourSum问题
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)解答:
def four_sum(target, list1=[]): console = [] length = len(list1) for i in range(0, length-3): for j in range(i+1, length-2): for k in range(j+1, length-1): if target == list1[i] + list1[j] + list1[k] + list1[k+1]: console.append([list1[i], list1[j], list1[k], list1[k+1]]) else: continue return print(console)结果:if __name__ == '__main__':
four_sum(0, [1, 0, -1, 0, -2, 2])
#结果:
[[1, 0, -1, 0], [1, -1, -2, 2], [0, 0, -2, 2]]
这里也要考虑列表中元素重复的问题,只能用index取value,不能用value求index,或造成错误。
相关文章推荐
- python基础练习--列表问题
- Two Sum问题解题报告
- Python列表问题解决
- LeetCode Two Sum II - Input array is sorted(Two pointer问题)
- 关于python的列表排序问题汇总
- python两个列表合成字典顺序问题
- 【python】列表的复制问题
- leetcode之Two Sum问题
- Python——“元组、列表、字典、数组和矩阵”的大小问题
- python 字典和列表的读取速度问题
- kaggle冰山船只分类竞赛中遇到的Python列表推导式问题
- python学习笔记7——列表中整数乘积末尾0的问题
- Python学习——leetcode(Two Sum)
- python读取文本文件URL列表遇到的问题和加载中数据获取问题
- Python中列表的拷贝问题
- python实现求解列表中元素的排列和组合问题
- Leetcode-Python 1 .Two Sum/ 7. Reverse Integer
- python3 程序问题解决列表
- LeetCode 1. Two Sum Python Solution
- python 列表,数组和矩阵sum的用法及区别介绍