neolee / pilot

进入编程世界的第一课
588 stars 842 forks source link

range 提示错误,找不到错在哪 #1435

Closed Totie-O closed 3 years ago

Totie-O commented 3 years ago

image image

Totie-O commented 3 years ago

我检查好久,还是看不出来,请老师指点一下

neolee commented 3 years ago

你能把代码贴出来么?总不能让我照着你的图片输入一遍吧……

Totie-O commented 3 years ago
def twoSum(nums, target):
    res = []
    newnums = nums[:]
    newnums.sort()
    left = 0
    right = len(newnums) - 1
    while left < right:
        if newnums[left] + newnums[right] == target:
            for i in range(0, len(nums)):
                if nums[i] == newnums[left]:
                    res.append(i)
                    break
            for i in range(len(nums) - 1, -1, -1):
                if nums[i] == newnums[right]:
                    res.append(i)
                    break
            res.sort()
            break

        elif newnums[left] + newnums[right] < target:
            left = left + 1

        elif newnums[left] + newnums[right] > target:
            right = right + 1

    return (res[0] + 1, res[1] + 1)
Totie-O commented 3 years ago

twoSum([3, 7, 4, 10, 5], 11) image

neolee commented 3 years ago

没看懂你的算法,为啥会有 right = right + 1 这一步?你的 right 不是等于 len(newnums) - 1 么?这个一 +1 可不就是越界了么?

建议把你的问题和算法思路先用清晰明白、分步骤的中文写出来,然后确认思路无误再把它变成代码。

Totie-O commented 3 years ago

好的,谢谢老师,太难了。 我一直以为是前面if的语句出错,没想到时候后面那个right,我下次会认真一些。