【发布时间】:2018-08-11 16:06:34
【问题描述】:
如您所见,如果元素重复超过 n 次,我将尝试删除它。
例如: {1,2,4,5,6,5} 并且每个元素都可以重复一次然后我应该返回 {1,2,4,5,6}
这是我到现在为止的想法:
public static int[] deleteNth(int[] elements, int maxOcurrences) {
int times[] = new int[elements.length];
for(int i =0;i<elements.length;i++){
for(int j =0;i<elements.length;j++){
if(elements[i]==elements[j]){
times[i]++;
if(times[i]>maxOcurrences){
System.arraycopy(elements, j+1 , elements, j, elements.length - 1 - j);
}
}
}
}
return elements;
}
这是对的吗?如果不是,我该如何纠正 (我还是个新手,请放轻松),谢谢
【问题讨论】:
-
我强烈建议使用
arraylist而不是数组,并在使用contains时让arraylist处理remove元素的逻辑,尽管使用set -
你的嵌套循环的条件应该是
j<elements.length -
你应该使用
j = i + 1。不需要做更多的工作 -
对数组进行排序可以吗?如果是,首先对数组进行排序并遍历数组并在遍历数组时用下一个唯一元素替换重复项,最后替换的索引将为您提供新数组的长度,然后执行 Arrays.copyOf( ...)。如果无法对数组进行排序,则创建一个 arraylist ,如果不存在则添加到其中,然后使用 list.toArray() 返回数组
-
@GalAbra 感谢您指出这一点:)