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

2019-03-01  本文已影响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,就要被强制赋值
上一篇 下一篇

猜你喜欢

热点阅读