26 删除有序数组重复项
题目链接:. - 力扣(LeetCode)
题目描述:
给你一个 非严格递增排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
考虑 nums
的唯一元素的数量为 k
,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums
,使nums
的前k
个元素包含唯一元素,并按照它们最初在nums
中出现的顺序排列。nums
的其余元素与nums
的大小不重要。 - 返回
k
示例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 。不需要考虑数组中超出新长度后面的元素。
思路:
指针设置:
- src 指针指向需要迭代遍历的数组,从第二个元素开始比较
- dst 指针是存放去重后数据
- 比较数据,如果相等,dst指针不动,src指针++,直到二者所在位置的数据不相等
- 如果不相等,dst 指针向前移动,并将 src 指针指向数据搬移过来,然后src++
代码:
int removeDuplicates(int* nums, int numsSize) {
int dst = 0, src = dst + 1;
while (src < numsSize) {
if(nums[src]==nums[dst]){
src++;
}
else{
dst++;
nums[dst] = nums[src];
src++;
}
}
return dst + 1;
}
优化后的代码:
int removeDuplicates(int* nums, int numsSize) {
int dst = 0, src = dst + 1;
while (src < numsSize) {
if (nums[src] != nums[dst] && ++dst != src) {
nums[dst] = nums[src];
}
src++;
}
return dst + 1;
}
27 移除元素
题目链接:. - 力扣(LeetCode)
题目描述:
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
示例1:
输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2,_,_] 解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)
示例2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2 输出:5, nums = [0,1,4,0,3,_,_,_] 解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。
思路:
- src 指针指向需要迭代遍历的数组,从第一个元素开始比较
- dst 指针是存放去重后数据
- 比较数据,如果 nums[src] 的值与 val 的值相等,src++
- 如果不相等,src 给 dst 赋值,然后 src 和 dst 都++
代码:
int removeElement(int* nums, int numsSize, int val) {
int dst = 0, src = 0;
while (src < numsSize) {
if (nums[src] == val) {
src++;
}
else{
nums[dst] = nums[src];
dst++;
src++;
}
}
return dst;
}
优化后的代码:
int removeElement(int* nums, int numsSize, int val) {
int dst = 0, src = 0;
while (src < numsSize) {
if (nums[src] != val) {
nums[dst] = nums[src];
dst++;
}
src++;
}
return dst;
}
祝大家生活愉快。