完整的问题,我开始在线学习Python,但对这个标记为简单的问题有疑问
给定一个排序数组,就地删除重复项,使得每个 元素只出现一次并返回新的长度。不分配 另一个数组的额外空间,您必须通过修改输入来完成此操作 数组就位,具有 O(1) 额外内存。
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
k=0
for i in range(i+1,len(nums)-1):
j=i+1
for j in range(j+1,len(len(nums))):
if nums[i] == nums[j]:
del nums[j]
len_list = nums
return(len_list, nums)
这相当容易,一旦您意识到必须从列表的end开始工作,这样您的删除就不会更改列表中您尚未检查的部分。
a = [1,1,1,3,4,5,5,5,5,7,7,7,9,9]
for i in range(len(a)-1,0,-1):
if a[i] == a[i-1]:
del a[i]
结果是
[1, 3, 4, 5, 7, 9]
@BoarGules 的第一个答案是最好的。但我们也可以向前做。
a = [1,1,1,3,4,5,5,5,5,7,7,7,9,9]
i =0
l = len(a)-1
while i < l :
if a[i] == a[i+1]:
del a[i+1]
l -=1
else :
i +=1
print(a)
结果将是:
[1, 3, 4, 5, 7, 9]
看起来您正在解决 LeetCode 问题: https://leetcode.com/problems/remove-duplicates-from-sorted-array/
如果是,这应该是你的答案:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
i = 0
for j in range(1, len(nums)):
if (nums[i] != nums[j]):
i += 1
nums[i] = nums[j]
return i + 1
除了返回的长度之外,你留下的内容并不重要。
下面的代码删除重复项并按降序对数组进行排序。
class Solution(object):
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a_value=sorted(set(nums),reverse=True)
if len(a_value) > 2:
a=a_value[2]
else:
a=a_value[0]
return a
我认为我应该使用 Javascript 提供答案。
最好使用两指针技术来解决这个问题。定义将跟踪唯一元素的第一个指针和迭代数组 nums 的第二个指针。
function removeDuplicates(nums) {
if (nums.length === 0) return 0;
let uniqueIndex = 0;
for(let i = 0; i < nums.length; i++) {
if(nums[i] !== nums[uniqueIndex]) {
uniqueIndex++
nums[uniqueIndex] = nums[i];
}
}
return uniqueIndex + 1;
};
首先,我们需要检查输入数组 nums 是否为空。
我们定义第一个指针
let uniqueIndex = 0;
来跟踪
独特的元素。
继续迭代我们的数组 nums。在 for 循环中, i 充当 第二个指针。它遍历数组,而 uniqueIndex 表示找到的最后一个唯一元素的当前位置。
条件
nums[i] !== nums[uniqueIndex]
检查当前是否
元素 (nums[i])
与最后找到的唯一元素不同
(nums[uniqueIndex])
。如果不同,则意味着新的独特元素
找到后,uniqueIndex指针递增,当前元素
被复制到uniqueIndex指示的位置。