官方题解:
双指针法:
对上述方法的分析:
j指针用来跳过重复项,i指针用来构建新数组。
这样用双指针实现了动态。
下面是自己写的python实现:
class Solution:
# def removeDuplicates(self, nums: List[int]) -> int:
def removeDuplicates(self, nums: List[int]) -> int:
#原地删除,排序数组,但是不可以动态删除
if len(nums) == 0:
return len(nums)
i = 0
for j in range(1,len(nums)):
if nums[j] != nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
官方的java版本:
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
下面是自己的想法实现:
实现了动态删除数组的功能,主要是while循环的利用,遇到重复立即进行删除,然后break跳出循环,下次数组循环的起始点为上次删除的数组下标点。(这样即可实现动态删除数组)
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
# def removeDuplicates(nums):
#原地删除,排序数组,但是不可以动态删除
if len(nums) == 1 or len(nums) == 0:
return len(nums)
if len(nums) == 2 and nums[-1] != nums[0]:
return len(nums)
temp = 0
while(temp != len(nums) - 1):
#
for j in range(temp,len(nums)):
temp = j
print(temp)
if j > 0 and nums[j] == nums[j -1]:
del nums[j]
break
else:
pass
print(len(nums) - 1)
print("*********")
##这个时候并没有遍历到最后,最后一个元素没有遍历到
if temp == len(nums) - 1 and len(nums) > 1:
if nums[temp] == nums[temp - 1]:
temp = temp - 1
del nums[temp]
if temp > len(nums) - 1:
return len(nums)
# print(len(nums) - 1)
return len(nums)