全球速看:算法之删除有序数组里的重复项

哔哩哔哩

2023-03-27 01:05:58

题目:

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。


【资料图】

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组

int[] expectedNums = [...]; // 长度正确的期望答案

int k = removeDuplicates(nums); // 调用

assert k == expectedNums.length;

for (int i = 0; i < k; i++) {

assert nums[i] == expectedNums[i];

}

如果所有断言都通过,那么您的题解将被 通过。

示例 1:

输入:nums = [1,1,2]

输出:2, nums = [1,2,_]

解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]

输出:5, nums = [0,1,2,3,4]

解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

提示:

1 <= nums.length <= 3 * 104

-104 <= nums[i] <= 104

nums 已按 升序 排列

我的答案:

我的解析:

使用双索引,j指向等待被赋值的下标,i遍历数组,寻找允许留下的值放到j处。最终的j就是答案本身,代表j左边有多少个数。

最新资讯

猜你喜欢

全球速看:算法之删除有序数组里的重复项

2023-03

a股上市是什么意思_a股是什么意思 速递

2023-03

世界速读:3000余人进场应聘!2023年嘉定区春季综合人力资源招聘洽谈会举行

2023-03

为催收物业费竟然阻碍装修 物业公司被判赔偿业主损失 全球快播报

2023-03

【全球时快讯】癫痫患儿家属海外购氯巴占被诉贩毒案续:将于下周五再开庭

2023-03

热议半场国足0-1新西兰:踢得比上一场更自信,朱辰杰乌龙挺背的

2023-03

独孤曼陀结局

2023-03

中国发展高层论坛共议促消费举措:减轻家庭支出负担、房地产市场与消费券|即时焦点

2023-03