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

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

时间:2022-10-13 12:44:44浏览次数:44  
标签:下标 target nums 列表 数组 目标值 多测师

给定一个整数数组 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)

 

#定义函数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)

 

标签:下标,target,nums,列表,数组,目标值,多测师
From: https://www.cnblogs.com/xiaoshubass/p/16787789.html

相关文章

  • Java基础语法 二维数组
    二维数组packagecom.ljg.java;/**二维数组的使用:* 规定:二维数组分为外层数组的元素,内层数组的元素* int[][]arr=newint[4][3];* 外层元素:arr[0],arr[......
  • React Hook:无用渲染-PureComponent-shouldCompoent-函数组件
    过渡技术1.1无用的渲染组件是构成React视图的一个基本单元。有些组件会有自己本地的状态(state),当它们的值由于用户的操作而发生改变时,组件就会重新渲染。在一个React......
  • php 二维数组排序
    PHP二维数组排序(简单易懂版)1.先定义一个数组  $data[]=array('volume'=>67,'asd'=>'b','edition'=>2);$data[]=array('volume'=>86,'cc'=>'b','edition'=>1......
  • 209. 长度最小的子数组
    209.长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组 [numsl,numsl+1,...,numsr-1......
  • 26.删除有序数组中的重复项
    给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。classSolution{publi......
  • 经典的Python题目【杭州多测师】【杭州多测师_王sir】
    """这个m遍历那个匿名函数每一次遍历到最后都是最大值3,m括号里面的2是传给x的实参双循环打断了,m每次进去出来都取了最后一次的3。m是匿名函数,可以理解为m=[lambdax......
  • Java基础语法 数组的默认初始化值
    默认初始化值packagecom.ljg.java;/**⑤数组元素的默认初始化值* >数组元素是整型:0* >数组元素是浮点型:0.0* >数组元素是char型:0或'\u0000',而非'0'......
  • KMP算法中对于next数组构建的理解
     时间:2022/10/12 一.next数组原理的说明KMP算法一般用于解决字符串匹配的问题,在KMP算法出现之前,字符串匹配一般通过双层for循环的暴力方法解决,时间复杂度为O(......
  • 用数组求解斐波那契数列
    packageshuzu;//Fibonacci数列为{0,1,1,2,3,5,8,13,21,34,55,……},其首两项为0和1,以后各项时其前两项之和。importjava.util.Arrays;importjava.util.Scanner;p......
  • Java数组05(数组相关应用)
    Arrays类:数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了Arrays供我们使用,从而可以对数据对象进行一些基本操作可以查......