java - 比较两个数组并从原始数组java中删除重复项(无列表)

标签 java arrays

所以我试图比较两个字符数组,并且 keyW 中存在的所有字母都应该从数组 invAlphabet 中删除。我已经能够在 invAlphabet 数组中找到重复项,但是,我不知道如何在不使用我不应该使用的列表或集合的情况下删除重复元素... 有什么想法吗?

public static void main(String[] args)
{
    final int SIZE = 26;
    char[] keyW = {'A', 'L','O'};

    char[] invAlphabet = new char [SIZE];


    for (int i = 0; i < SIZE; i++)
    {
        invAlphabet[i] = (char)('Z' - i);

    }



    for (int i = 0; i<keyW.length; i++)
    {
        for (int j = 0; j < invAlphabet.length; j++)
        {
            if(keyW[i] == invAlphabet[j])
            {
                //need to delete the invAlphabet[j] elements that are duplicates
                System.out.println(invAlphabet[j]);
                System.out.println(j);
                break;

            }

        }
    }

}

最佳答案

如果你想在 O(n) 内解决它,那么你可以标记 keyW[] 数组中存在的所有字符,然后检查并不要将它们添加到新数组中noDuplicateArray[]

char[] keyW = {'A', 'L', 'O', 'P'};
char[] invAlphabet = {'X', 'A', 'P', 'B', 'C'};

//create boolean array
boolean[] mark = new boolean[128];
Arrays.fill(mark, false);

//mark which characters are present in keyW array
for (char ch : keyW) {
    mark[ch] = true;
}

// find number of duplicate character in invAlphabet array
int duplicateCount = 0;
for (char ch : invAlphabet) {
    if (mark[ch]) {
        duplicateCount++;
    }
}

// create new array
// size of new array = invAlphabet array length - duplicate number of character in invAlphabet array
char[] noDuplicateArray = new char[invAlphabet.length - duplicateCount];

//add character in new array
int idx = 0;
for (char ch : invAlphabet) {
    if (!mark[ch]) {
        noDuplicateArray[idx++] = ch;
    }
}

关于java - 比较两个数组并从原始数组java中删除重复项(无列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40823210/

相关文章:

java - Clojure - 找不到匹配的方法

java - 继承类中的相等和哈希码

python - 通过索引号引用字典元素

javascript - JSON 访问循环错误

arrays - 使用sizeof将字符附加到字符串形式用户的末尾

python - 如何使用数组值列表检查数组?

java - 将 InitBinder 与命令对象一起使用

java - 如何在 Spring 生态系统中使用 JPA hibernate 连接到不同的 mysql 数据库模式?

java - 是否必须在 linux 发行版中使用 open jdk 而不是 oracle 网站上可用的 jdk 版本

java - 从 2D 数组创建一维数组 Java