问题陈述:我必须从数组中删除n个重复项。
以下是完整的问题陈述:https://pastebin.com/EJgKUGe3
我的解决方案是:
public class minion_labour_shift_2ndTry {
static int[] data = {1,2, 2, 3, 3, 3, 4, 5, 5};
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
data = answer(data, n);
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
public static int[] answer(int[] data, int n) {
if (data.length>99){
System.exit(0);
}
int[] result = new int[99];
ArrayList<Integer> temp = new ArrayList<>();
int counter = 0, count ,maxCount = 0;
for (int i = 0; i < data.length; i++) {
boolean isDistinct = false;
for (int j = 0; j < i; j++) {
if (data[i] == data[j]) {
isDistinct = true;
break;
}
}
if (!isDistinct) {
result[counter++] = data[i];
}
}
for (int i = 0; i < counter; i++) {
count = 0;
for (int j = 0; j < data.length; j++) {
if (result[i] == data[j]) {
count++;
}
}
System.out.println("....... count"+count);
if (maxCount <= count){
maxCount = count;
}
if (count <= n){
temp.add(result[i]);
}
}
if (maxCount-1 < n){
return data;
}
data = new int[temp.size()];
for (int i = 0; i <temp.size() ; i++) {
data[i] = temp.get(i);
}
return data;
}
}
现在,我的问题是,我错过了什么以及如何通过所有10个案例。
在此先感谢:)
注意:它将在java 7中编译,并且不允许使用Map,hashset或第三方库,输入/输出操作,产生线程或进程以及对执行环境的更改。
答案 0 :(得分:0)
不打算提供完整的解决方案,但建议重新编写算法,因为不清楚你在做什么,你从未解释过你对算法的实际想法。例如,您使用的是什么isDistinct?
1)循环一次并计算每个数字的频率。您可以使用长度为100的数组,因为这将是所有数据输入。当你循环时,跟踪两件事:出现超过n次的条目总数,以及这些数字
2)创建一个适当大小的结果数组(从上面计算)并再次遍历列表并填写未超过阈值的元素。
答案 1 :(得分:0)
我最初误解了这些要求,这就是所要求的:
public static int[] answer2(int[] data, int n) {
if (data.length>99){
System.exit(0);
}
ArrayList<Integer> temp = new ArrayList<>();
int count;
for (int i = 0; i < data.length; i++) {
count = 0;
for (int j = 0; j < data.length; j++) {
if (data[i] == data[j]) {
count++;
}
}
if (count <= n){
temp.add(data[i]);
}
}
data = new int[temp.size()];
for (int i = 0; i <temp.size() ; i++) {
data[i] = temp.get(i);
}
return data;
}
...还有你自己的代码,略有改动:
{{1}}