• 给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找 和为目标值 target 的三个整数,并返回它们的数组下标【杭州多测师】【杭州多测师_王sir】


    给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找 和为目标值 target 的三个整数,并返回它们的数组下标

    # 第一种:通过for循环遍历实现
    class Foo(object):
    
        @staticmethod
        def sum(nums, target):
            result = []
            n = len(nums)
            for i in range(n):
                for j in range(i+1,n):
                    for k in range(j+1,n):
                        num = nums[i] + nums[j] +nums[k]
                        if num == target:
                            result.append(i)
                            result.append(j)
                            result.append(k)
                            break
            return result
    
    n = [5,1,2,4]
    print(Foo.sum(n,7))
    # 第二种:列表推导式
    # nums = [1,2,3,4,5,6,7,8,9]
    def fun(nums,target):
        list1 = [(x,y,z) for x,x1 in enumerate(nums)
                 for y,y1 in enumerate(nums)
                 for z,z1 in enumerate(nums)
                 if x1!=y1!=z1 and x1+y1+z1==9]
        print(list1)
    
    nums = [5,1,2,4,7]
    target=9
    fun(nums,target)
    #第三种方法
    def func1(nums,target):
        i = 0
        while i < len(nums)-2:
            j = i+1
            k = len(nums)-1
            while j < k:
                if nums[i]+nums[j]+nums[k] > target:
                    k -= 1
                elif nums[i] + nums[j] + nums[k] < target:
                    j += 1
                else:
                    return [i,j,k]
            i += 1
    
    nums = [1,2,2,3,5]
    a = func1(nums,7)
    #定义函数threeSum接收参数为列表及目标值
    def threeSum(alist, targetnum):
    #假设这三个数分别为a,b,c和为targetnum,此处设置第一重循环,获取循环获取a的下标和值
        for i, j in enumerate(alist):
    #此处设置第二重循环用于获取b的下标和值
            for m, n in enumerate(alist[i+1:]):
    #由于b的下标和值使用了切片操作每次取i+1后值,每次获取的下标m不是在原列表中的实际为,所以需要通过计算realM得到b在原列表的实际位置
                realM = i+m+1
    #根据i和m的值计算c在原列表中取值的起始位置,由于c需要在b后面一位开始取值,所以需要+2
                k = i+m+2
    #通过统计c出现次数,判断targetnum - (j+n)是否出现在列表索引k位置之后
                if alist[k:].count(targetnum - (j+n)) > 0:
    #c值在列表索引k位置之后可能出现多次,此处用循环取得所有c值
                    for x in range(alist[k:].count(targetnum - (j+n))):
    #使用index函数获取c值对应的下标索引
                        y = alist.index(targetnum - (j+n), k)
    #打印一组a,b,c值对应的索引下标
                        print(i, realM, y)
    #重置c值的搜索起始位置为y+1
                        k = y+1
     
    #定义输入列表数据
    a = [5,1,2,4,7,4,3,1]
    #调用函数传入列表a及目标值7 
    threeSum(a, 7)
  • 相关阅读:
    嵌入式Linux c语言常用数据结构
    Project Euler 9
    串口应用开发的步骤
    创建简单的守护进程的编写规则
    Linux进程间通信信号通信
    [转]linux进程间的通信手段
    守护进程实例
    Linux slab 分配器剖析了解 Linux 内存管理的方式(转)
    嵌入式Linux c语言常用数据结构2
    嵌入式程序员应知道的几个题目(重要)
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/16787789.html
Copyright © 2020-2023  润新知