美文网首页
删除线性表中指定数据-使用数组实现

删除线性表中指定数据-使用数组实现

作者: 兔子是黑老大 | 来源:发表于2019-03-01 16:49 被阅读0次

    tag 线性表 数组 删除指定数据

    思想

    1. 假设:val为指定值
    2. 使first和second首先指向第一个元素
      1. 如果second != val,那么first和second同时前进,并且会进行赋值
      2. 如果second == val,那么second前进,而first则进行等待,直到找到一个second != val的位置再次执行1
      3. 重复1-2,直到second达到末尾
      4. first指向的位置就是删除指定元素之后的数组

    代码

      public int removeElement(int[] nums, int val) {
            if(nums == null || nums.length == 0)
            return 0;
           int j = 0;
           //跳过相等的部分,不等的部分赋值
           for(int i = 0; i < nums.length;i++){
               if(nums[i] != val){
                   nums[j] = nums[i];
                   j++;
               }
           }
           return j;
        }
    

    总结

    1. 特别注意的一点是nums[j] = nums[i];的赋值位置,这个for改成while可能更好理解
    2. 总体思想是跳过指定元素,和删除线性表中的重复数据-使用单链表实现的总体思想是一样的
    3. 注意一点和删除线性表中的重复数据-使用单链表实现的区别
      1. 为什么删除重复数据first和second指向的不是同一个位置?
        因为需要比较,而删除指定数据是不需要再从数组中拿出一个数据进行比较的
      2. 在删除指定数据和删除重复数据中first起什么作用?
        在删除重复数据中,first不仅担任着要记录需要返回的不重复数据的个数,而且还担任着比较的任务;但是在删除指定数据中,first纯粹只是个记录变量,只要second不等于val,就要被强制赋值

    相关文章

      网友评论

          本文标题:删除线性表中指定数据-使用数组实现

          本文链接:https://www.haomeiwen.com/subject/xtoduqtx.html