在尝试从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,则显示修改后的值,不确定是什么问题。
现在同样的情况也发生在其他问题上,例如:
旋转阵列 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
如果其他人遇到此问题或有任何人知道解决方法,请告诉我。
答案 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