27. 移除元素

题目

解析

题目意思不难理解,重点是思路,我刚拿到题目的时候,想的是数值匹配,只有出现了匹配的那就直接将数组后面的数字直接覆盖当前位置的,但是知道遇见了一个测试用例



他给出的预期答案是



当时我就在想为什么4会跑到3的前面去,后来再找到原因,该题的解题思路应该是从前往后遍历数组,如果出现等于val的数,就将数组中该位置的数和后面某一个不等于val的数交换,只有这种情况下才有可能会出现4出现在3的前面。

代码

public class Main {
    public static void main(String[] args) {
        int[] nums = {0,1,2,2,3,0,4,2};
        int val = 2;

        // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
        int len = new Main().removeElement(nums, val);

        // 在函数里修改输入数组对于调用者是可见的。
        // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
        for (int i = 0; i < len; i++) {
            System.out.print((nums[i] + " "));
        }
    }

    public int removeElement(int[] nums, int val) {
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
                for (int j = nums.length - 1; j > i; j--) {
                    if (nums[j] != val) {
                        int temp = nums[j];
                        nums[j] = nums[i];
                        nums[i] = temp;
                        break;
                    }
                }
            }
        }
        int len = nums.length;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
                len = i;
                break;
            }
        }
        return len;
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,207评论 0 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,569评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 看电视节目,采访很多成功人士,问到他们的成功。都会说:也许是我比较幸运。人生哪来那么多幸运? 有一个朋友,每次我都...
    紫草思雨阅读 907评论 2 6
  • 心理状况 对学习 最影响 我本想 坚持走下去 可是 是一走三停 一唱三叹 应该说 我留恋世间的温存 却忘了 温柔刀...
    昙花不定阅读 246评论 0 0