27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上

简介: 27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上

目录

[27. 移除元素-力扣](https://leetcode.cn/problems/remove-element/description/?languageTags=c)

[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)

[88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/)

下面的几道题e1e8eba554c84add9285f9f5e579a360.png,都运用一个双指针(下标)遍历法


27. 移除元素-力扣


示例1:


输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]

示例2:


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


这道题最容易想到的思想是开辟一个新数组,然后遍历原数组,如果原数组中的某个值不等于val的值,就把这个值放到新数组中


如图:


02ff2e0815e84fe1aabb10696f4cdcc1.png





最开始src指向的元素等于val,src向后走,des不变





f17244eb0791478ea66ae15d78d01d6f.png


src指向的值不等于val,所以将这个值放到des指向的空间中,接着src和des都向后移





c096b7c256bb44f78ddecd108f6c33b9.png


接下来的步骤以此类推,最终会得到一个合适的数组


但是这个方法显然不满足题中要求的原地修改,但是我们可以借助这个思想,只不过是在原数组上进行操作


让src和des都指向原数组,其余步骤都与上面那个方法类似





93a99c6002a64fc5be68375bc1fd1161.png





最开始src指向的元素等于val,src向后走,des不变




4d92ea6dde0644b9b6bbdd7f56755798.png



接着src指向的元素的值不等于val,把这个值赋给des指向的空间中,接着src des向后挪



44394aa1353149adae9926590fc43b15.png



src指向的元素的值不等于val,把这个值赋给des指向的空间中,接着src des向后挪


5bfa9a3612e14759a1f36e534b273dae.png





src指向的元素等于val,src向后走,des不变


1eaabff3b7c743079aa20a3ea83ab9b4.png




此时,src已经遍历出了数组,遍历结束,可以看到实际上操作后的数组就是[2,2],长度是2,也正好是作为下标的des的值,所以最后返回des的值。


代码如下:


int removeElement(int* nums, int numsSize, int val) {
    int des = 0;
    for (int src = 0; src < numsSize; src++) {
        if (nums[src] != val) {
            nums[des] = nums[src];
            des++;
        }
    }
    return des;
}


目录
相关文章
|
2月前
|
存储 算法 C语言
通过指针引用数组元素
通过指针引用数组元素
21 0
|
2月前
|
C语言 C++
数组元素的指针
数组元素的指针
10 0
|
2月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
2月前
|
存储 安全 Java
防止数组元素的指针被修改
防止数组元素的指针被修改
15 1
|
2月前
|
算法 搜索推荐
LeetCode刷题---215. 数组中的第K个最大元素(双指针,快速选择)
LeetCode刷题---215. 数组中的第K个最大元素(双指针,快速选择)
|
2月前
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
|
2月前
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
|
4月前
|
存储 搜索推荐 Serverless
用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10
用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10
19 0
|
4月前
|
C语言
【C语言】数组元素:带方括号的下标形式和指针形式
【C语言】数组元素:带方括号的下标形式和指针形式
20 0
|
5月前
|
存储
【每日一题Day294】LC88合并两个有序数组 | 双指针
【每日一题Day294】LC88合并两个有序数组 | 双指针
17 0