没有那么大的区别。一个区别是,您的循环在最后一个值中迭代一个超出范围的项目,并且它们的解决方案迭代直到最后三个元素:
例如,对于nums=[1,4,6,1,2,3] 和 seq=[1,2,3],i 将采用介于 0 和 len(nums)-1 之间的值,也就是说在这种情况下是 i=[0,1,2,3,4,5],并且
您的解决方案迭代将是这样的:
i=0
nums[i:i+3]=nums[0:3]->[1,4,6]
nums[0:3] == seq ->False
...
i=1
nums[i:i+3]=nums[1:4] ->[4,6,1]
nums[i:i+3] == seq ->False
....
#and so on
但是在最后三个元素 (i=len(nums)-3) 之后,继续比较没有意义,因为列表的长度会不同:
i=len(nums)-3=3
nums[i:i+3]=nums[3:6] ->[1,2,3]
nums[i:i+3] == seq ->True
return True
...
i=len(nums)-2=4
nums[i:i+3]=nums[4:7] ->[2,3]
nums[i:i+3] == seq ->False
...
i=len(nums)-1=5
nums[i:i+3]=nums[5:8] ->[3]
nums[i:i+3] == seq ->False
...
#End loop
所以也许您可以使用 range(len(nums)-2),最后一次迭代 i=len(nums)-3。
另一种解决方案,正如我向您解释的那样,迭代直到i=len(nums)-3,并逐项比较:
i=0
nums[i]=nums[0]-> 1
nums[i+1]=nums[1]-> 4
nums[i+1]=nums[2]-> 6
nums[i]==1 and nums[i+1]==2 and nums[i+2]==3 --->False
...
#and so on until i i=len(nums)-3
简而言之,区别在于循环,您可以逐个切片进行比较,而他们的解决方案是逐项比较。