博客
关于我
LeetCode7_数组双指针_有序数组元素去重、数组移除指定元素
阅读量:351 次
发布时间:2019-03-04

本文共 1675 字,大约阅读时间需要 5 分钟。

题目1-有序数组元素去重


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

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

在这里插入图片描述

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的解答


  • 思路

嵌套循环,外层控制元素,判断 当前位置的 元素 是否和 近邻 的元素重复

若重复,进入内层循环,将 后面的全部元素 整个向前覆盖一步,即删除 重复的第一个元素

需要注意的是:

  • 当删除一个元素之后,数组的长度会减1,最后面的元素会不断复制元素,需要 统计 出现的重复 元素的个数(或者说是 整体移动的次数count,从而外层循环不在处理 整体移动 产生的 重复值)
  • 还需要处理 当连续出现 3个、4个或者更多的 重复元素的情况,每次移动之后,外层循环的i需要保持当前位置 即加上 i --
class Solution {       public int removeDuplicates(int[] nums) {           int count = 0;        for(int i = 0;i

题解之双指针


之前遇到的 链表双指针,判断链表是否有环(快慢指针) 、删除链表倒数第n个节点(间隔指针)

参考往期博客:

注意题目给的是有序数组,这样才能实现

思路

  • i作为下标 指针 处理 有效的元素,永远指向 最后一个有效元素
  • j作为另一个下标指指针 跑在 i 之前,
    • 遇到 和 nums[i]相等的元素,就 直接跳过,不用处理,对应ij的距离加一
    • 遇到和 nums[i]不相等的元素,就 i ++ 为有效元素找位置,然后 nums[i] = nums[j];
class Solution {       public int removeDuplicates(int[] nums) {           if(nums.length == 0){               return 0;        }        //双指针        int i = 0;        for(int j = 1;j

题目2-数组移除指定元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

在这里插入图片描述

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/remove-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


我的解答


在这里插入图片描述

有了双指针的思想,果然好实现多了,和上面的基本一样,

只不过需要注意的地方是

  • 对于 指定元素可以存在多个,对于处于 第一个位置 的情况,想要删除,需要 快指针 从j = 0开始
class Solution {       public int removeElement(int[] nums, int val) {           if(nums.length == 0){               return 0;        }        if(nums.length == 1 && nums[0] == val){               return 0;        }        //双指针        //需要注意的是 i 从 -1开始,即处理 nums[0] 存在待删除元素        int i = -1;        for(int j = 0;j
你可能感兴趣的文章
基于FPGA的HDMI信号采样原理
查看>>
Spring 与使用STOMP消息
查看>>
Linux 查看系统语言
查看>>
十 一、C语言创建桌面程序:单选按钮、复选框和分组框控件
查看>>
Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法
查看>>
Java Swing JList:列表框组件
查看>>
AngularJS $q
查看>>
jQuery中的动画
查看>>
Linux host命令
查看>>
MongoDB 查询分析
查看>>
编写Makefile.am
查看>>
狂神说MySQL01:初识MySQL
查看>>
5.3.2 等待一段时间:编写延时循环
查看>>
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
查看>>
光环和你一起迎接改版
查看>>
1.12 项目和运营的区别
查看>>
2.1 组织运行环境
查看>>
7.3 制定预算
查看>>
习惯养成记打卡-第7章 项目成本管理
查看>>
习惯养成记打卡-第9章 项目资源管理
查看>>