给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。求代码,用例输入为112输出为2
时间: 2024-12-24 16:28:22 浏览: 3
这个问题可以用双指针法解决,可以创建两个指针 i 和 j,初始都指向数组的第一个元素。遍历数组,如果 nums[i] 不等于 nums[j],则将 nums[j+1] 赋值为 nums[i] 并移动 j 指针;否则,i 自动加一表示遇到重复元素。遍历结束后,j+1 就是新数组的长度,因为所有非重复元素都被移动到了 j 后面。
以下是 Python 语言的一个示例代码:
```python
def removeDuplicates(nums):
if not nums:
return 0
i = 0
for j in range(1, len(nums)):
if nums[j] != nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
# 示例
nums = [112, 112, 111, 111, 112, 111]
new_length = removeDuplicates(nums)
print(new_length) # 输出:2
```
在这个例子中,输入数组 [112, 112, 111, 111, 112, 111] 中,重复的元素 112 和 111 分别在位置 0 和 3 出现,因此最后只保留了这两个唯一的数字,返回长度为 2。
相关问题
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。求代码
对于给定的非严格递增排序数组 `nums`,你可以使用双指针技巧来原地删除重复元素并返回新数组的长度。以下是Python语言的一个解决方案:
```python
def removeDuplicates(nums):
if not nums:
return 0
# 使用两个指针,i指向当前未处理的位置,j作为已检查过的最后一个位置
i = 0
for j in range(1, len(nums)):
# 如果当前值等于下一个值,则跳过
if nums[i] == nums[j]:
continue
# 否则更新i到j+1,表示当前位置之后不再有重复元素
i += 1
nums[i] = nums[j]
# 返回新数组的长度(即处理完后的实际长度)
return i + 1
```
在这个函数中,我们遍历数组,如果遇到重复元素,就直接跳过;否则将该元素移动到已处理部分的末尾。最后返回 `i + 1` 即为去重后的数组长度。
给你一个非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
给你一个非严格递增的整数数组 `nums`,你可以通过遍历数组并利用两个指针来解决这个问题。首先,创建两个指针,一个指向数组开始(`i`),另一个指向当前未处理的元素(`j`)。当 `i` 指向的元素小于等于 `j` 指向的元素时,表示 `i` 位置的元素已经不需要保留了,因为后面的元素都不比它小,可以将 `i` 后移一位。
每次移动 `i` 到下一个元素时,如果 `nums[i]` 等于 `nums[j]`,说明它们是重复的,直接将 `j` 后移,直到找到不同的值;如果 `nums[i]` 大于 `nums[j]`,则 `i` 和 `j` 都不变,继续检查下一对元素。当 `i` 越过 `j` 时,说明 `j` 所在的区间内没有更大的元素,这时更新 `j` 的下一个位置,并将 `i` 向前推进一位。
最后,`i` 的位置就是新数组的长度,因为所有非重复的元素都在这个范围内。返回 `i+1` 即为唯一元素的数量。
示例如下:
```python
def removeDuplicates(nums):
i = 0
for j in range(len(nums)):
if nums[i] <= nums[j]:
i += 1
else:
nums[i] = nums[j]
return i + 1
```
阅读全文