Leetcode Python问题

时间:2017-02-08 08:26:46

标签: python list

在尝试从LeetCode解决一些问题时,我面临着一个非常奇怪的问题。

  

问题26:从排序数组中删除重复项

     

https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/

Example:

Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of 
nums being 1 and 2 respectively.
It doesn't matter what you leave beyond the new length.

为了编码这个问题,我使用了:

class Solution(object):
def removeDuplicates(self, nums):
    nums = list(set(nums))
    return len(nums)
  

此代码正在做的是首先将列表转换为集合和   然后回到列表,反过来将删除重复

但是当我尝试将此代码提交给leetcode解决方案时,会返回修改后的nums长度,但是当程序尝试访问nums数组时,它不会更新。

  

这只在Leetcode编辑器中发生,在我的系统中如果我尝试打印nums,则显示修改后的值,不确定是什么问题。

enter image description here

现在同样的情况也发生在其他问题上,例如:

  

旋转阵列   https://leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/646/

     

向右旋转n个元素的数组,步长为k步。

     

例如,当n = 7且k = 3时,阵列[1,2,3,4,5,6,7]被旋转到[5,6,7,1,2,3,4]

我对此问题的解决方案如下:

class Solution(object):
 def rotate(self, nums, k):
    newIndex = k % len(nums)
    nums = nums[newIndex+1:len(nums)] + nums[0:newIndex+1]
    print nums

但我再次从提交中得到的输出让我感到惊讶。

  

注意在“你的STDOUT”中,我们可以看到相应的修改列表。   link to the Screenshot

如果其他人遇到此问题或有任何人知道解决方法,请告诉我。

3 个答案:

答案 0 :(得分:0)

你可以使用 sudo service network-manager restart

答案 1 :(得分:0)

解决此问题的方法是使用:nums[:] = nums[newIndex+1:len(nums)] + nums[0:newIndex+1]

执行nums = nums[newIndex+1:len(nums)] + nums[0:newIndex+1]只会更改引用,而nums[:]则会更改列表的值。

答案 2 :(得分:0)

代码中发生的事情是返回的长度用于在后端移动nums以打印nums列表的唯一值。因此,问题的要求是您返回的长度将从索引0移到返回的长度。因此,在返回唯一值的长度时,我们还必须修改原始列表,即nums。 第一个链接的解决方案

class Solution:
    def removeDuplicates(self, nums):
        if(len(nums) == 0):
            return 0
        elif len(nums) == 1 :
            return 1
        else:
            l = 1
            for i in range (1,len(nums)):
                if nums[i] != nums[i-1] :
                    #l+=1
                    nums[l] = nums[i]
                    l+=1
            return l