26. 删除排序数组中的重复项
题目:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。
代码:
1.刚开始没注意是一个有序数组,所以首先考虑了利用set集合消重,把重复元素剔除,代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
var set=new HashSet
for(int i=0,j=0;i<nums.length;i++){
if(!set.contains(nums[i])){
set.add(nums[i]);
nums[j++]=nums[i];
}
}
return set.size();
}
}
2.有序数组,i与i-1,不同则必是新元素,所以可以不用set集合,代码如下:
class Solution {
public int removeDuplicates(int[] nums) {
int i=1,j=1;
for(;i<nums.length;i++){
if(nums[i]!=nums[i-1]){
nums[j++]=nums[i];
}
}
return j;
}
}
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术