精华内容
下载资源
问答
  • python三数之和
    千次阅读
    2018-07-13 18:25:56
    def find_threedigit(arr, target):
        arr.sort()
        result = []
        for i in range(len(arr)-1):
            if arr[0] > target:
                return -1
    
            for j in range(i+1, len(arr)):
                temp = arr[i] + arr[j]
                if temp <= target and ((target - temp) in arr[j::]):
                    print(result.append([arr[i], arr[j], target - temp]))
    
        return result
    
    
    
    if __name__ == "__main__":
        arr = list(map(int, input().split()))
        target = int(input())  #测试输入的时候,写的是12,下面的结果为12 的结果
        print(find_threedigit(arr, target))

    out:
    2 3 4 5 6 7 12
    [[2, 3, 7], [2, 4, 6], [2, 5, 5], [3, 4, 5]]
    今天只来讨论一种最简单的计算三个数之和为某个数的方法,
    思路是两层循环,固定其中的两个数,那么剩下的一个数也固定了,很简单的方法,大家应该可以理解



    更多相关内容
  • Python三数之和

    千次阅读 2020-12-05 19:16:46
    三数之和题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c , 使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 答案中不允许包含重复的三元组。 示例: 给定数...

    三数之和题目描述:

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
    使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
    
    答案中不允许包含重复的三元组。
    
    示例:
    
    给定数组 nums = [-1, 0, 1, 2, -1, -4],
    
    满足要求的三元组集合为:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    
    

    思路:

    
     1. 首先将数组排序,可以利用Python内置函数,也可以利用另外定义排序算法。
     2. 应用双指针算法。固定第一个数,索引为i,遍历整个数组,第一个数也是三个数中最小的数,然后在该数右面设置左右两个指针l和r,l=i+1,r=len(nums)-1,
     3. 判断这三个索引指向的元素和与0的大小关系。
     和>0,右指针左移一位;和<0,左指针右移一位。
     由于要避免重复的三元组,所以移动左右指针的时候要跳过相邻的所有相等的nums[i]。
     
    

    Python3代码:

    #导入计算时间的包,调用系统时间
    from time import * 
    #初始时间
    t1 = time()
    
    def threeSum(nums):
        nums.sort()
        n = len(nums)
        res = []
        for i in range(n):
            '''如果相邻的两个数相等,跳过,避免重复'''
            if i > 0 and nums[i] == nums[i-1]:
                continue 
            l, r = i+1, n-1
            while l < r:
                if nums[i] + nums[l] + nums[r]>0:
                    r -= 1
                    while nums[r+1] == nums[r]:
                        r -= 1
                elif nums[i] + nums[l] + nums[r]<0:
                    l += 1
                    while nums[l-1] == nums[l]:
                        l += 1    
                else:
                    res.append([nums[i],nums[l],nums[r]])
                    l += 1
                    r -= 1
                    while nums[l] == nums[l - 1]: l += 1
                    while nums[r] == nums[r + 1]: r -= 1
        return res
            
    
    if __name__ == '__main__':
        nums = [-1,0,1,2,-1,-4]
        print(threeSum(nums))
    #结束时间
    t2 = time()
    #运行时间
    run_time = t2 - t1
    print(run_time)
    
    

    运行结果:

    [[-1, -1, 2], [-1, 0, 1]]
    #运行时间
    0.0010113716125488281
    

    以上代码有一些思想错误:

    遗漏了如果三个数全部大于0,则退出循环,因为没有满足条件的结果。
    没有严格判断每一次的l<r的条件。
    

    修正后的代码:

    from time import * 
    
    t1 = time()
    
    def threeSum(nums):
        nums.sort()
        n = len(nums)
        res = []
        for i in range(n-2):
            if nums[i] > 0:break
            '''如果相邻的两个数相等,跳过,避免重复'''
            if i > 0 and nums[i] == nums[i-1]:
                continue 
            l, r = i+1, n-1
            while l < r:
                if nums[i] + nums[l] + nums[r]>0:
                    r -= 1
                    while l < r and nums[r-1] == nums[r]:
                        r -= 1
                elif nums[i] + nums[l] + nums[r]<0:
                    l += 1
                    while l < r and nums[l] == nums[l-1]:
                        l += 1    
                else:
                    res.append([nums[i],nums[l],nums[r]])
                    l += 1
                    r -= 1
                    while l < r and nums[l] == nums[l - 1]: l += 1
                    while l < r and nums[r] == nums[r + 1]: r -= 1
        return res
            
    
    if __name__ == '__main__':
        nums = [-2,-3,0,0,-2]
        print(threeSum(nums))
    
    t2 = time()
    
    run_time = t2 - t1
    print(run_time)
    
    

    结果:

    []
    #时间
    0.0
    
    展开全文
  • 【Leetcode】Python实现三数之和

    千次阅读 热门讨论 2018-06-01 21:57:47
    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, ...

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
    
    满足要求的三元组集合为:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    class Solution(object):
        def threeSum(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            # 存储结果列表
            res_list = []
            # 对nums列表进行排序,无返回值,排序直接改变nums顺序
            nums.sort()
            for i in range(len(nums)):
                # 如果排序后第一个数都大于0,则跳出循环,不可能有为0的三数之和
                if nums[i] > 0:
                    break
                # 排序后相邻两数如果相等,则跳出当前循环继续下一次循环,相同的数只需要计算一次
                if i > 0 and nums[i] == nums[i-1]:
                    continue
                # 记录i的下一个位置
                j = i + 1
                # 最后一个元素的位置
                k = len(nums) - 1
                while j < k:
                    # 判断三数之和是否为0
                    if nums[j] + nums[k] == -nums[i]:
                        # 把结果加入数组中
                        res_list.append([nums[i], nums[j], nums[k]])
                        # 判断j相邻元素是否相等,有的话跳过这个
                        while j < k and nums[j] == nums[j+1]: j += 1
                        # 判断后面k的相邻元素是否相等,是的话跳过
                        while j < k and nums[k] == nums[k-1]: k -= 1
                        # 没有相等则j+1,k-1,缩小范围
                        j += 1
                        k -= 1
                    # 小于-nums[i]的话还能往后取
                    elif nums[j] + nums[k] < -nums[i]:
                        j += 1
                    else:
                        k -= 1
            return res_list
    
    
    if __name__ == '__main__':
        s = Solution()
        result_list = s.threeSum([-1, 0, 1, 2, -1, -4])
        print(result_list)
    展开全文
  • python 数字三角形

    千次阅读 2020-12-08 14:24:11
    ''' row=int(input()) if row==0: print(0) else: dp=[[0 for i in range(row+1)] for j in range(row+1)] # python中创建二维列表 for i in range(row): line=input().split() for j in range(i+1): dp[i+1][j+1]=...

    '''

    题目描述 Description

    下图给出了一个数字三角形,请编写一个程序,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。

    (1)每一步可沿左斜线向下或右斜线向下

    (2)1 < 三角形行数 < 100

    (3)三角形数字为0,1,…99

    输入描述 Input Description

    有很多个测试案例,对于每一个测试案例, 通过键盘逐行输入,第1行是输入整数(如果该整数是0,就表示结束,不需要再处理),表示三角形行数n,然后是n行数

    输出描述 Output Description

    输出最大值。

    样例输入 Sample Input

    5

    7

    3 8

    8 1 0

    2 7 4 4

    4 5 2 6 5

    样例输出 Sample Output

    30

    '''

    '''

    思路:使用动态规划,构建二维数组dp

    dp数组中的数值表示到达当前节点的累计最大值,运用动态规划解决的问题必须是希望在每个子问题上获得最优解(称为最优子结构)

    '''

    row=int(input())

    if row==0:

    print(0)

    else:

    dp=[[0 for i in range(row+1)] for j in range(row+1)]

    # python中创建二维列表

    for i in range(row):

    line=input().split()

    for j in range(i+1):

    dp[i+1][j+1]=int(line[j])

    # print(dp)

    for k in range(2,row+1):

    for p in range(1,k+1):

    dp[k][p]=max(dp[k-1][p-1],dp[k-1][p])+dp[k][p]

    last=dp[-1]

    max=-1

    for elem in last:

    if elem>max:

    max=elem

    print(max)

    展开全文
  • python输出

    千次阅读 2021-06-02 10:32:41
    如何利用python 求出一个,主要是利用好数学思想,代码很简单 m = eval(input("请输入一个:")) a = int(m/100) b = int((m-a*100)/10) c = m % 10 print("为:",a+b+c) 然后,就可以了!
  • 大部分初学编程的人来讲刚开始都邑演习推断两个或许的大小,来熟习某种言语的特征最基本的if,else轮回,当我们进修了更高等的语法学问后,又会有差别的完成体式格局,比方顺次吸收用户输入的3个,排序后...
  • Python编程练习判断的大小

    千次阅读 2020-11-27 15:51:37
    大部分初学编程的人来说刚开始都会练习判断两个或者的大小,来熟悉某种语言的特性最基本的if,else循环,当我们学习了更高级的语法知识后,又会有不同的实现方式,比如这道练习题依次接收用户输入的3个,...
  • Python求解两数之和

    千次阅读 2019-07-01 13:32:48
    给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。 比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10. 注意,不可以重复...
  • Python三个数字排列大小

    千次阅读 2022-03-30 21:54:15
    l = [] for i in range(3): x = int (input('输入整数:')) l.append(x) l.sort() print(l)
  • 求各位上的数字之和python

    千次阅读 2022-01-15 20:59:46
    求各位上的数字之和 法一: def func(num): sum = 0 while num!=0: n = num%10 sum += n num = num//10 return sum print(func(12345)) 法二: def func(num): a = str(num) b = 0 for i in a: b+=int...
  • python计算一个个位数之和

    万次阅读 2021-04-26 09:11:29
    #(1)输入一个 n = input("请输入一个") n = int(n) #将 字符串类型 转成 数值 456 #(2)得到百位b100 ...#计算各个位数之和 sum = b100 + b10 + b1 #输入结果 print("各个位数之和:%d"%sum) ...
  • python计算整数各位数字之和

    万次阅读 多人点赞 2021-04-14 16:50:26
    计算整数各位数字之和 描述 输入一个正整数,计算其各个位的数字之和。 n = input() #将数字作为字符串输入 list = list(n) #将字符串转换为列表 s = 0 for i in range(len(list)): s+= int(list[i]) #将字符转换为...
  • Python3 数字(Number)

    千次阅读 2020-12-09 22:37:33
    Python 数字数据类型用于存储数值。数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。以下实例在变量赋值时 Number 对象将被创建:var1 = 1var2 = 10您也可以使用del语句删除一些...
  • #假设这分别为a,b,c为targetnum,此处设置第一重循环,获取循环获取a的下标值 for i, j in enumerate(alist): #此处设置第二重循环用于获取b的下标值 for m, n in enumerate(alist[i+1:]): #由于b的...
  • python三从小到大排序_后端开发

    千次阅读 2020-11-30 00:24:25
    python中range()函数怎么用_后端开发python中range()函数的用法:python中range()函数可创建一个... python三从小到大排序1、首先定义一个函数paiLie();然后在paiLie函数内使用for循环input获取三个数字并存...
  • Python3 数字(Number)Python 数字数据类型用于存储数值。数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。以下实例在变量赋值时 Number 对象将被创建:var1 = 1var2 = 10您也可以...
  • python 判断个数字中的最大值,具体代码如下所示:#判断中最大值n1= int(input('please enter the firest number:'))n2 = int(input('please enter the second number:'))n3 = int(input('please enter the ...
  • 下面羽忆教程为你介绍用python函数打印图形数算。python函数应用下面小编会用两个简单python函数打印横线以及python函数求和以及平均值的例子为你展示python函数应用,提升你对python函数的理解。python函数自定义...
  • python三位正整数各位数的立方之和

    千次阅读 2020-05-12 22:58:12
    python三位正整数各位数的立方之和 python入门级题目 # -*- coding: UTF-8 -*- n=int(input("请输入一个三位的正整数:")) #input输入默认是字符串 x=int(n/100) #注意python不会自动取整 y=int(n%100/10) #十位 z=n...
  • python平均值

    千次阅读 2020-11-21 00:30:10
    本文收集整理关于python平均值的相关议题,使用内容导航快速到达。内容导航:Q1:利用python3.x计算任意数据平均值l=[1,2,3]def ave(a):print(sum(a)/len(a))ave(l) 2.0 或者 x = lambda c:sum(c)/len(c) ...
  • 刚刚学习Python,欢迎大家指点#Filename:Triangle#Function:Judgment triangle#Author:Judy#Time:2018.9.26a=int(input("Please input the first side:")) #输入第一条边b=int(input("Please input the second side:...
  • python求数字位数的方法

    千次阅读 2020-11-22 13:06:38
    js求 例如输入508就输出5+0+8的13: 随机推荐 centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建 一.Java安装 1.安装包准备: 首先到官网下载jdk,...
  • python比较大小

    万次阅读 2021-04-09 09:05:37
    ```python #从小到大 a=eval(input("a=")) b=eval(input("b=")) c=eval(input("c=")) if a>b: a,b=b,a if a>c: a,c=c,a if b>c: b,c=c,b print(a,b,c)
  • Python实现两数之和python

    千次阅读 2019-10-17 21:07:31
    Python实现两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中...
  • 前言大部分初学编程的人来说刚开始都会练习判断两个或者的大小,来熟悉某种语言的特性最基本的if,else循环,当我们学习了更高级的语法知识后,又会有不同的实现方式,比如这道练习题依次接收用户输入的3个...
  • 怎么用python比较大小

    千次阅读 2020-11-20 20:02:40
    大部分初学编程的人来说刚开始都会练习判断两个或者的大小,来熟悉某种语言的特性最基本的if,else循环,当我们学习了更高级的语法知识后,又会有不同的实现方式,比如依次接收用户输入的3个,排序后打印...
  • # 判断4102个是否都大于16530 for line in a, b, c: if line (False) return False # 任意两边之和大于第边 if (a + b - c) * (a + c - b) * (b + c - a) > 0: print(True) return True else: print(False) ...
  • 输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu思路:求各个位数上的和求得的和再将各...
  • Python_计算任意个的数字之和

    千次阅读 2020-01-19 20:59:25
    星号形参的应用,在函数内接收参数形成元组 def add(*args): sum = 0 for i in args: sum += i return sum print(add(1, 2, 3, 4, 5)) 运行结果 15

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 691,131
精华内容 276,452
关键字:

python三数之和