26. 删除有序数组中的重复项
题目
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。
将最终结果插入 nums 的前 k 个位置后返回 k 。
不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
难度:简单
示例 1:
输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
题解
方法一:采用异或运算。每次将相邻两个元素进行异或运算,如果结果为0就说明相邻两个位置的数相等,不做任何
处理,如果不相等就进行赋值运算。在这里使用两个变量frist、second,因为每次都是两个数进行判断,对于不相等的两个数将其赋值给nums,这样就直接在原数组上进行了修改。
注意:i 的判断条件,当i<numsSize时,i+1=numsSize,溢出数组的最大长度
int removeDuplicates(int* nums, int numsSize){
int frist=0,second=1;
for(int i=0;i<numsSize-1;i++){
if(nums[i]!=nums[i+1]){
nums[frist]=nums[i];
nums[second]=nums[i+1];
frist++;second++;
}
}
return second;
}
时间复杂度:O(n)
空间复杂度:O(n)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理