从排序数组中删除重复项不起作用

时间:2015-05-17 18:50:52

标签: java arrays

  

给定一个排序数组,删除每个重复项   元素只出现一次并返回新的长度。不要分配   另一个数组的额外空间,你必须使用常量来做到这一点   存储器中。

我提出了以下解决方案,但这并没有返回正确的输出 - 我的意思是我的输入数组仍然有重复的值?我做错了什么?

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));
    }
}

注意:这不是作业,只是准备面试。

2 个答案:

答案 0 :(得分:1)

Java不是C.您没有用空指针或零字符标记数组的结尾。 Java数组具有恒定的长度,并且永远不会更改。

您的算法实际上运行良好,但您可能希望将所有数组元素置于i之外,以明确这些元素未使用。使用实际的0,而不是'\0'这是一个char值,它恰好与int分配兼容,但实际上并不合适。

另请注意,作业需要return长度。这可能意味着你必须把它写成一个方法,它接受数组作为参数并返回新的长度。

答案 1 :(得分:0)

初始化后,Java中的数组长度无法更改,因此您不得不使用新大小进行复制。实际上,Java数组的length参数被声明为final,因此一旦设置就无法更改。