Python 解读列表中TwoSum及FourSum问题

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, abcd)
  • 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,或造成错误。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值