如何挑选网站主机,支付宝网页版,网站的建设需要考虑什么,ppt成品免费下载26. 删除有序数组中的重复项(remove-duplicates-from-sorted-array)
给你一个 非严格递增排列 的数组 nums #xff0c;请你** 原地** 删除重复出现的元素#xff0c;使每个元素 只出现一次 #xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 …26. 删除有序数组中的重复项(remove-duplicates-from-sorted-array)
给你一个 非严格递增排列 的数组 nums 请你** 原地** 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k 你需要做以下事情确保你的题解可以被通过
更改数组 nums 使 nums 的前 k 个元素包含唯一元素并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。
判题标准:
系统会用下面的代码来测试你的题解:
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 * 10^4-10^4 nums[i] 10^4nums 已按 非严格递增 排列
首先注意数组是有序的那么重复的元素一定会相邻。
要求删除重复元素实际上就是将不重复的元素移到数组的左侧。
考虑用 2 个指针一个在前记作 p一个在后记作 q算法流程如下
1.比较 p 和 q 位置的元素是否相等。
如果相等q 后移 1 位 如果不相等将 q 位置的元素复制到 p1 位置上p 后移一位q 后移 1 位 重复上述过程直到 q 等于数组长度。
返回 p 1即为新数组长度。
pq0011122334
java代码 public int removeDuplicates(int[] nums) {if(nums null || nums.length 0) return 0;int p 0;int q 1;while(q nums.length){if(nums[p] ! nums[q]){nums[p 1] nums[q];p;}q;}return p 1;
}golang代码
func removeDuplicates(nums []int) int {n : len(nums)if n 0 {return 0}slow : 1for fast : 1;fast n;fast {if nums[fast] ! nums[fast-1] {nums[slow] nums[fast]slow}}return slow
}