给定一个排序数组,删除每个重复项 元素只出现一次并返回新的长度。不要分配 另一个数组的额外空间,你必须使用常量来做到这一点 存储器中。
我提出了以下解决方案,但这并没有返回正确的输出 - 我的意思是我的输入数组仍然有重复的值?我做错了什么?
public class Solution {
public static void main(String[] args) {
int[] input = new int[] { 1, 1, 3, 7, 7, 8, 9, 9, 9, 10 };
int length = input.length;
if (length == 0 || length == 1) {
System.out.println(length);
System.exit(0);
}
int i = 1;
for (int j = 1; j < length; j++) {
if (input[j] != input[j - 1]) {
input[i] = input[j];
i++;
}
}
if (i < length) {
input[i] = '\0';
}
System.out.println(i);
System.out.println(Arrays.toString(input));
}
}
注意:这不是作业,只是准备面试。
答案 0 :(得分:1)
Java不是C.您没有用空指针或零字符标记数组的结尾。 Java数组具有恒定的长度,并且永远不会更改。
您的算法实际上运行良好,但您可能希望将所有数组元素置于i
之外,以明确这些元素未使用。使用实际的0
,而不是'\0'
这是一个char值,它恰好与int
分配兼容,但实际上并不合适。
另请注意,作业需要return
长度。这可能意味着你必须把它写成一个方法,它接受数组作为参数并返回新的长度。
答案 1 :(得分:0)
初始化后,Java中的数组长度无法更改,因此您不得不使用新大小进行复制。实际上,Java数组的length参数被声明为final,因此一旦设置就无法更改。