首页 > 解决方案 > 删除数组元素后如何将元素向左移动?

问题描述

我被要求在(lets say k=30)不使用内置方法的情况下从数组中删除元素并将其他元素移到左侧。

我尝试了以下方法。

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int[] arr = new int[] { 1, 2, 30, 4, 5, 30, 6 };

    int k = 30;
    int count = 0;

    System.out.println("---Original Array------");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }

    for (int i = 0; i < arr.length; i++) {

        if (arr[i] == k)
            count++;
    }

    for (int j = 0; j < count; j++) {
        for (int i = 0; i < arr.length; i++) {

            if (arr[i] == k) {
                for (int l = i; l < arr.length - 1; l++) {
                    arr[l] = arr[l + 1];
                }
            }
        }

    }

    System.out.println("---Modified Array------");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }

}

我需要这样的输出:[1 2 4 5 6 0 0]

但上述逻辑的输出是:[1 2 4 5 6 6 6]

另外,我担心在这里使用嵌套的 for 循环。有什么方法可以在不使用任何内置方法的情况下降低时间复杂度?

标签: javaarrayselement

解决方案


这是另一个变体:

    int[] arr = new int[] { 1, 2, 30, 4, 5, 30, 6 };

    int k = 30;
    int j = 0;

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] != k) {
            arr[j++] = arr[i];
        }
    }
    while (j < arr.length) {
        arr[j++] = 0;
    }

推荐阅读