鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 11

[已解决]课后作业求助

[复制链接]
发表于 2021-10-27 09:28:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
0. 给定一个整数列表 nums 和一个目标值 target,请在该数组中找出和为目标值的两个元素,并将它们的数组下标值打印出来。
比如给定的列表 nums = [2, 7, 11, 15],目标值 target = 9,那么由于 nums[0] + nums[1] = 2 + 7 = 9,所以打印结果是:[0, 1]

这是我写的 不能运行,求助。
nums = [2,7,11,15]
target = 9
for n in rang(0,3):
    for m in rang(1,3):
        if nums[n] + nums[m] == target:
            print("[",n,",",m,"]")
最佳答案
2021-10-27 14:36:59
for n in range(0,3):
    for m in range(1,3)

少了个 e 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-27 09:47:11 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-27 09:56 编辑

复杂版本:
nums = [2, 7, 11, 15]
target = 9

def solution(nums: list, target: int) -> list:
    if not (target%2):
        if nums.count(int(target/2)) > 1:
            return [nums.index(int(target/2)), nums[nums.index(int(target/2))+1:].index(int(target/2))+nums.index(int(target/2))+1]
    return [[nums.index(i), nums.index(j)] for i in nums for j in nums if (i != j) and (i+j == target)][0]

print(solution(nums, target))
简单版本:
nums = [2, 7, 11, 15]
target = 9

def solution(nums: list, target: int) -> list:
    for n, i in enumerate(nums):
        for m, j in enumerate(nums[n+1:], start = n+1):
            if i+j == target:
                return [n, m]

print(solution(nums, target))
输出:
[0, 1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-27 09:57:57 | 显示全部楼层
傻眼貓咪 发表于 2021-10-27 09:47
复杂版本:简单版本:输出:

看不懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 10:02:15 | 显示全部楼层
本帖最后由 fish_nian 于 2021-10-27 10:10 编辑
def twoSum(nums, target):
    count = dict()
    for a, b in enumerate(nums):
        if target - b not in count:
            count[b] = a
        else:
            print([count[target - b], a])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 10:05:06 | 显示全部楼层
这个代码的思路就是通过目标数值9减去遍历列表中的每个数值,9-2 = 7,只要找到7就输出到字典中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 10:07:07 | 显示全部楼层
其实也可以直接使用暴力法破解,for循环第一个数值,然后继续for循环剩下的数值,知道找出满足条件的,另外可以节省时间把大于目标数的数值排除,例如11 > 9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 10:10:41 | 显示全部楼层

这题是力扣第一题,温馨建议:先不要做力扣,因为你的基础还不稳。

从你的代码:print("[",n,",",m,"]")  #这里就已经是错误了,你必须了解数据类型:字符串、整数、浮点数、布林值,你输出的是字符串,不是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 10:12:21 | 显示全部楼层
温馨建议:从基础学起,小甲鱼的课外习题做一遍,你慢慢可以掌握基础的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-27 10:54:37 | 显示全部楼层
傻眼貓咪 发表于 2021-10-27 10:12
温馨建议:从基础学起,小甲鱼的课外习题做一遍,你慢慢可以掌握基础的

大神你好可以加个联系方式吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 11:40:10 | 显示全部楼层
山西李逵 发表于 2021-10-27 10:54
大神你好可以加个联系方式吗。

抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 14:36:59 | 显示全部楼层    本楼为最佳答案   
for n in range(0,3):
    for m in range(1,3)

少了个 e 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 14:59:19 | 显示全部楼层
你的代码错了  是range  不是rang。
nums = [2,7,11,15]
target = 9
for n in range(0,3):
    for m in range(1,3):
        if nums[n] + nums[m] == target:
            print("[",n,",",m,"]")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 06:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表