26. 删除有序数组中的重复项-遍历数组
26. 删除有序数组中的重复项-遍历数组
给你一个 升序排列 的数组 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 。不需要考虑数组中超出新长度后面的元素。
这个题目事实上需要我们完成去重和统计不重复的数据个数,但因为数据时有序的,我们其实遍历一次就可以解决问题解题代码如下:
int removeDuplicates(int* nums, int numsSize){
int start=nums[0]-1;
int count=0;
for(int i=0;i<numsSize;i++){
if(nums[i]!=start){
start=nums[i];
nums[count++]=start;
}
}
return count;
}
相关文章
- 如何遍历php数组时,同时取出array的下标和值
- java实现遍历树形菜单方法——数据库表的创建
- 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析
- Java实现 洛谷 P3916 图的遍历(反向DFS+记忆化搜索)
- Java实现 LeetCode 566 重塑矩阵(遍历矩阵)
- Java实现 LeetCode 94 二叉树的中序遍历
- 编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]
- jquery遍历数组的方式
- JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
- 【二叉树】LeetCode 102. 二叉树的层序遍历【中等】
- LeetCode(107): 二叉树的层次遍历 II
- LeetCode(103): 二叉树的锯齿形层次遍历
- linux shell带索引下标遍历数组
- go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历
- 二叉树的遍历:前序、中序、后序遍历
- 二叉树的中序遍历
- 10.for循环遍历数组
- uni——foreach遍历 创建对象数组
- PHP foreach遍历数组(多种方式)
- 2133. 检查是否每一行每一列都包含全部整数-遍历矩阵
- 2239. 找到最接近 0 的数字-遍历一次数组
- 1424. 对角线遍历 II
- vue双向绑定的时候把遍历的数组转为了字符串,并且再转回去数组进行绑定
- MySQL游标循环遍历输出时字段值都是null
- 最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路