我来问道无与说 2024-01-25 13:25 采纳率: 100%
浏览 11
已结题

python解翻滚数组,在力扣与自己环境中结果不同

使用力扣的python解题,示例出现了问题,但我在自己的IDE上是可以通过的?
题目是189. Rotate Array
自己的集成环境代码如

nums = [1,2]
k=2
l = len(nums) - k
if l <= 0:
    nums = nums[::-1]
else:
    nums += nums[0:l]
    del (nums[0:l])
print(nums)

力扣输入面板如

class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        l = len(nums) - k
        if l <= 0:
            nums=nums[::-1]
        else:
            nums += nums[0:l]
            del(nums[0:l])

在nums=[1,2]
k=2
该例中,我的代码可以解出nums=[2,1]
但是力扣上显示我的输出结果为[1,2]

  • 写回答

2条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-01-25 13:43
    关注

    在 LeetCode 的环境中,需要对原始传入的 nums 进行修改,而不能创建一个新的变量 nums,因为创建新的变量 nums 会让最初的 nums 引用不变。在你的代码中,nums = nums[::-1] 和 nums += nums[0:l] 创建了新的 nums,因此原始的 nums 没有发生改变。
    你可以使用切片来对原始的 nums 进行原地改变:

    class Solution(object):
        def rotate(self, nums, k):
            l = len(nums) - k
            nums[:] = nums[-l:] + nums[:-l]
    
    

    这样就可以了,这段代码等同于你的原有逻辑。需要注意的是,为了保证 k 在千万级别的 nums 数组,如果 k 远大于 nums 的长度时还能正确运行,所以要对 nums 的长度取模,l = len(nums) - k % len(nums)。如果 l 为负,那么直接用 nums[-l:] + nums[:-l] 这种写法还是会出问题,应改为 nums[l:] + nums[:l] 。最终的代码可以改为:

    class Solution(object):
        def rotate(self, nums, k):
            l = len(nums) - k % len(nums)
            nums[:] = nums[l:] + nums[:l]
    
    

    希望这个答案能够帮到你,如果你还有其它问题,欢迎随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置