题目英文

Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,2],Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {print(nums[i]);
}

题目中文

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

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

示例 1:

给定数组 nums = [1,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。你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}

算法实现

代码实现一

public class Solution {public int RemoveDuplicates(int[] nums) {if (nums.Length < 2)return nums.Length;int i = 0;int j = nums.Length - 1;if (nums[i] == nums[j])return 1;while (i < j){int k = i + 1;int curr = nums[k];if (curr == nums[i]){for (int r = k; r < j; r++){nums[r] = nums[r + 1];}nums[j] = curr;j--;}if (nums[i] != nums[k]){i++;}}return i + 1;        }
}

代码实现二

public class Solution {public int RemoveDuplicates(int[] nums) {if (nums.Length < 2)return nums.Length;int i = 0;for (int j = 1; j < nums.Length; j++){if (nums[j] != nums[i]){i++;nums[i] = nums[j];}}return i + 1;        }
}

实验结果

代码实现一

  • 状态:通过
  • 161 / 161 个通过测试用例
  • 执行用时: 676 ms, 在所有 C# 提交中击败了 11.44% 的用户
  • 内存消耗: 32.1 MB, 在所有 C# 提交中击败了 5.04% 的用户

代码实现二

  • 状态:通过
  • 161 / 161 个通过测试用例
  • 执行用时: 356 ms, 在所有 C# 提交中击败了 97.92% 的用户
  • 内存消耗: 32.3 MB, 在所有 C# 提交中击败了 5.04% 的用户


相关图文

1. “数组”类算法

  • LeetCode实战:三数之和
  • LeetCode实战:最接近的三数之和
  • LeetCode实战:求众数
  • LeetCode实战:缺失的第一个正数
  • LeetCode实战:快乐数
  • LeetCode实战:寻找两个有序数组的中位数
  • LeetCode实战:盛最多水的容器

2. “链表”类算法

  • LeetCode实战:两数相加
  • LeetCode实战:删除链表的倒数第N个节点
  • LeetCode实战:合并两个有序链表
  • LeetCode实战:合并K个排序链表
  • LeetCode实战:两两交换链表中的节点
  • LeetCode实战:旋转链表
  • LeetCode实战:环形链表

3. “栈”类算法

  • LeetCode实战:有效的括号
  • LeetCode实战:最长有效括号
  • LeetCode实战:逆波兰表达式求值

4. “队列”类算法

  • LeetCode实战:设计循环双端队列
  • LeetCode实战:滑动窗口最大值
  • LeetCode实战:整数反转
  • LeetCode实战:字符串转换整数 (atoi)

5. “递归”类算法

  • LeetCode实战:爬楼梯

6. “字符串”类算法

  • LeetCode实战:反转字符串
  • LeetCode实战:翻转字符串里的单词
  • LeetCode实战:最长公共前缀

7. “树”类算法

  • LeetCode实战:相同的树
  • LeetCode实战:对称二叉树
  • LeetCode实战:二叉树的最大深度
  • LeetCode实战:将有序数组转换为二叉搜索树

8. “哈希”类算法

  • LeetCode实战:两数之和

9. “搜索”类算法

  • LeetCode实战:搜索二维矩阵

10. “动态规划”类算法

  • LeetCode实战:最长回文子串

11. “数值分析”类算法

  • LeetCode实战:回文数
  • LeetCode实战:x 的平方根

LeetCode实战:删除排序数组中的重复项相关推荐

  1. C++描述 LeetCode 26. 删除排序数组中的重复项

    C++描述 LeetCode 26. 删除排序数组中的重复项   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...

  2. leetcode 26 删除排序数组中的重复项

    https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素 ...

  3. LeetCode 80. 删除排序数组中的重复项 II

    1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完 ...

  4. LeetCode 26. 删除排序数组中的重复项

    1. 题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  5. LeetCode(#26)————删除排序数组中的重复项

    题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

  6. 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项

    开源地址 JiauZhang/algorithms​github.com 题目描述 * https://leetcode-cn.com/problems/remove-duplicates-from- ...

  7. Leetcode: removeDuplicates删除排序数组中的重复项

    题目: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不能改变数组的长 ...

  8. LeetCode 26.删除排序数组中的重复项

    原题 标签  : 数组  重复元素  有序  双指针 快慢指针 解题思路: 1.判断数组是否为空,为空返回0 2.我们可以放置两个指针 ,其中 k 是慢指针,用来存下所有不同的数,而 j 是快指针用来 ...

  9. C++ leetcode 26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

    一.思路: nowPos当前第几个没有重复的数,count指向第nowPos+1个重复数的位置 二.C++ int removeDuplicates(vector<int>& nu ...

  10. LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)

    删除排序数组中的重复项Ⅱ(C,Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python实现 1. 题目描述 难度:中等 2. 题目分析 这道题是LeetCode–26. 删 ...

最新文章

  1. 格式化输入输出(待更新)
  2. 参加软件测试培训前景怎么样
  3. 一款性能调优利器 — 火焰图
  4. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
  5. IOS开发基础之微博项目
  6. python tfidf特征变换_使用sklearn提取文本的tfidf特征
  7. 如何唤醒计算机,待机后如何唤醒计算机?介绍睡眠待机的优势
  8. PTA22、最小乘积(基本型) (10 分)
  9. java经纬度凸包graham_计算几何-凸包-Graham算法
  10. Hybrid Astar 算法剖析和实现(三)
  11. ElasticSearch查询模板
  12. pe服务器注册表,在PE里如何修改系统注册表?U盘PE下修改本机注册表方法
  13. 钉钉打新债自动提醒-python
  14. 手机的便签上如何设置纪念日和倒计时呢?
  15. java 安全包_信息加密系统设计(依托Java平台安全包)
  16. uniapp获取当前页面路由及参数 _@jie
  17. qbo 点云数据(距离)的获取
  18. Linux 2.6 劫持系统调用 隐藏进程
  19. android 桥接,路由器一键桥接Android实现
  20. [转帖]ARM 相关内容

热门文章

  1. 相关性分析p值_一行代码掌握皮尔逊相关分析,洞察变量关系
  2. hung-yi lee_p5-7_Gradient Descent(梯度下降)
  3. https和http有什么区别?看下面介绍就知道了!
  4. 远程连接windows出现身份验证错误,提示由于CredSSP加密Oracle修正解决方案
  5. Mysql无法选取非聚合列
  6. 模式的秘密-观察者模式(四)
  7. IDE set arguments
  8. 解决getOutputStream() has already been called for this response[java io流]
  9. Android 中文API (94) —— MediaController
  10. 文本分类step by step(二)