如何高效删除数组指定索引的元素?

来源:15-1 简历、电面、笔试、面试

慕粉1644224202

2021-03-12

老师你好:

public static int[]  removeElement(int[] nums, int index){
        int len=nums.length;
        if(index <0  || index >=len)
            throw new IllegalArgumentException("Remove failed. Index is illegal");
        for(int i=index+1; i<len;i++){
            nums[i-1] = nums[i];
        }
        len--;
        return nums;
    }

    public static void main(String[] args) {
        int[] test = {1,2,3,4,5,6};
        int[] res = removeElement(test, 2);
        for (int i = 0; i < res.length; i++) {
            System.out.print(res[i]);

        }

    }

以上代码会删除指定元素,但是数组长度不会变,比如上述结果会是 [1,2,4,5,6,6],
不知道有什么更好的方法能够原地把结果变成[1,2,3,4,5],
我可能想到的就是return Arrays.copyOfRange(nums, 0, len),但是又消耗了空间复杂度,
不知道有没有其他的做法能直接删除掉最后一个重复的元素。请老师指教,谢谢

写回答

1回答

javaman

2021-03-12

您好,没有太好的办法。

(1)可以考虑在你的函数里,用一个临时数组存放需要的数,本质和最后拷贝是一样的。

(2) 还可以先转成list,然后从list里删,再把list转回数组。


无论如何返回的数组不能是之前那个,因为数组的长度是不能自己改变的。


0
1
慕粉1644224202
谢谢老师
2021-03-12
共1条回复

算法面试刷题课--竞赛命题人带你刷70+高质量题型

只需20小时, Google面试官带你完成Java算法面试准备

539 学习 · 65 问题

查看课程