如何高效删除数组指定索引的元素?
来源: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回答
-
您好,没有太好的办法。
(1)可以考虑在你的函数里,用一个临时数组存放需要的数,本质和最后拷贝是一样的。
(2) 还可以先转成list,然后从list里删,再把list转回数组。
无论如何返回的数组不能是之前那个,因为数组的长度是不能自己改变的。
012021-03-12
相似问题
关于力扣 146LRU缓存机制问题
回答 1
队列倒叙是从队尾出来的吗?
回答 1