01

思路讲解

一种思路是可以新建一个数组。然后,遍历原数组,将所有值不等于val的元素放入新建的数组中,之后再将新建数组中那些值不等于val的元素拷贝至原数组。

public int removeElement(int[] nums, int val) {    // 新建数组,用于存放原数组中值不等于val的元素    int[] arr = new int[nums.length];
   // 新建数组中存放了多少个原数组中值不等于val的元素    int j = 0;    // 遍历原数组,将值不等于val的元素放入数组arr中    for(int i = 0; i < nums.length; i++) {        if (nums[i] != val) {            arr[j] = nums[i];            j++;        }    }
   // 拷贝数组arr中的数据到原数组中    for(int m = 0; m < j; m++) {        nums[m] = arr[m];    }    return j;}


但题目中要求原地移除所有数值等于val的元素,因此上面的实现方式是与题意不符的,接下来我们就以示例中的数组{3, 2, 2, 3}为例来看下如何原地移除所有数值等于val的元素。

首先,定义变量j,我们规定在区间[0,j)中的元素都是值不等于val=3的元素


接着,遍历原数组,对其中的每一个元素和val=3进行比较。比较的结果,有两种情况。一是,当前考察的元素值等于val=3;二是,当前考察的元素值不等于val=3

对于第一种情况,如下图所示,当前考察的元素为变量i指向的元素3,其值与val相等。


对于这种情况,要做的就是继续考察下一个元素,即变量i向后移动一个位置(i++)。


此时,变量i指向的元素2不等于val=3。


对于这种情况,首先要做的是将变量i所指向的元素值赋予变量j所指向的元素所在位置,即nums[j]=nums[i]


接着要做的就是将变量j向后移动一个位置,即j++


对于数组nums中剩余的元素2和3,重复上述步骤,即可将所有数值等于val的元素移除。


02

代码实现

public int removeElement(int[] nums, int val) {    // 定义变量j,在区间[0,j)中的元素都是值不等于val的元素    int j = 0;    for(int i = 0; i < nums.length; i++) {        // 如果当前考察的元素其值不等于val        // 则将当前元素放入区间[0,j)中        if (nums[i] != val) {            nums[j] = nums[i];            // 在将当前元素放入区间[0,j)中后,j++            j++;        }    }    return j;}


©著作权归作者所有:来自51CTO博客作者mb5fe18fccaee95的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 数据结构 #1 浅谈数组
  2. (美团)巧用数组下标,轻轻松松找出所有元素
  3. 剑指Offer 图解 | 寻找旋转排序数组中的最小值
  4. 视频讲解 | 图解剑指offer:二维数组的查找
  5. 超详细!详解一道高频算法题:数组中的第 K 个最大元素
  6. 图解 LeetCode 第 421 题:数组中两个数的最大异或值
  7. 一道简单的数组遍历题,加上四个条件后感觉无从下手
  8. 数组特性的妙用!如何找到「缺失的第一个正数」
  9. 图解「剑指Offer」之旋转数组的最小数字

随机推荐

  1. jQuery编程基础精华02(属性、表单过滤器,元
  2. Google 新物联网平台初体验—Android(安
  3. jQuery - 从一个列表项中查找活动类,并将
  4. mvc项目01_感受mvc的风景_jQuery validat
  5. 使用jQuery验证的MVC Razor View不验证空
  6. jquery easyui window或者dialog没有关闭
  7. jQuery的DOM操作实例(3)——创建节点&&编写
  8. 如何检测用户有关退出页面的信息?
  9. jQuery入门(2) 获取元素和DOM转换
  10. php ajax成功:函数(msg) -获取msg