永发信息网

给个数组,找出其中四个数使得其之和为给定的一个目标值,用python

答案:1  悬赏:70  手机版
解决时间 2021-11-29 10:46
给个数组,找出其中四个数使得其之和为给定的一个目标值,用python
最佳答案
class Solution(object):
    def fourSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        length = len(nums);
        result = [];
        nums.sort();                                            #先排序
        first = 0;
        while first < length - 3:                               #第一个数最右的位置也只能到倒数第四
            second = first + 1;
            while second < length - 2:                          #第二个数最右的位置也只能到倒数第三
                third = second + 1;
                fourth = length - 1;
                sum12 = nums[first] + nums[second];
                while third < fourth:
                    sum = sum12 + nums[third] + nums[fourth];
                    error = target - sum;
                    if error == 0:                              #如果四个数之和刚好等于目标值,加入结果list
                        result.append([nums[first],nums[second],nums[third],nums[fourth]]);
                        while third < length - 1 and nums[third] == nums[third + 1]:
                            third += 1;
                        third += 1;                             #将第三个数的索引移动下一个不一样的数上去
                        while second < length - 1 and nums[second] == nums[second + 1]:
                            second += 1;                        #将第二个数的索引移动到最后一个一样的数上
                        while first < length - 1 and nums[first] == nums[first + 1]:
                            first += 1;                         #将第一个数的索引移动到最后一个一样的数上
                    elif error > 0:                             #当四个数之和小于目标值,第三个数的索引右移到一个不同的数上
                        while third < length - 1 and nums[third] == nums[third + 1]:
                            third += 1;
                        third += 1;
                    else:                                       #当四个数之和大于目标值,第四个数的索引左移到一个不同的数上
                        while fourth > 0 and nums[fourth] == nums[fourth - 1]:
                            fourth -= 1;
                        fourth -=1;
                second += 1;
            first += 1;
        return result;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
最近汽车界有什么大新闻吗?
松原和牡丹江哪个市区面积大,哪个人口多,哪
1991年属羊邮票价格
斯柯达明锐1点6多大马力
为什么是丰田 网友:中国的丰田太抠门
1.9*4.5-0.45的简便算法
韩语里sa lang ham ni ta与sa lang he yo有什
回忆英超著名“披萨门” 至今未知真凶是谁
求一个EXCEL公试, 悬100分
邯郸市中心医院-发热门诊怎么去啊,有知道地
的灯坏了,是应该由物业出钱修理还是业主出
龙之谷天启套任务做到休伯特那里,NPC永远提
我这个电脑配置可以玩掠食吗
苏州新区泰山路纽威阀门详细地址
谁有《新唐遗玉》txt全集,更到番外二:失明
推荐资讯
暗装配电箱 家用强电箱16回路能用7回路吗
5万和3万的百分比怎么算
求あなたがいたから的罗马音
Last name 和 First name 到底哪个是名哪个是
HP4500 打印机 扫描仪故障,无法扫描,复印,
阿门阿上两只黄梨鸟,阿冷阿冷绿得刚发芽,窝
读者,青年文摘,意林,格言,对比一下这四本
温暖相伴4个字词语
EXCEL中PMT什么意思?
地栽木耳对水质的要求
电马桶好吗?电动马桶价格以及适用范围介绍
标识标牌常见的材料有哪些
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?