java - 如何删除部分数组中的所有 char 重复项(未排序且不应该排序)
问题描述
我正在尝试删除此部分数组中的重复项。我试图将第 i 个元素与每个元素进行比较,但出现了问题。
public class deleteRepeats{
public static void deleteRepeats(char[] c, int size){
int i,j;
char temp;
char[] newArray = new char[size];
for(i=0;i<size;i++){
newArray[i] = c[i];
}
for(i=0;i<size;i++){
for(j=0;j<size;j++){
if(newArray[i]==newArray[j]&&i!=j){
temp = newArray[j];
for(int k=j+1;k<size;k++){
newArray[k-1] = newArray[k];
newArray[size-1] = temp;
size-=1;
}
}
}
}
for(i=0;i<size;i++){
System.out.print(newArray[i]+" ");
}
}
public static void main(String[] args){
char[] a = new char[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'a';
a[3] = 'e';
a[4] = 'b';
a[5] = 'q';
deleteRepeats(a, 6);
}
}
电流输出:aee
解决方案
对于像这样的简单问题,您的代码太复杂了。为了更快地做到这一点,使用两个这样的循环
public static void deleteRepeats2(char[] c, int size){
int i, j, k = 0;
char[] newArray = new char[size];
for(i=0; i < size; i++){
for(j = 0; j < i; j++){
if (c[j] == c[i])
break;
}
if (j == i)
newArray[k++] = c[i];
}
for(i=0; i < k; i++){
System.out.print(newArray[i]+" ");
}
}
或者,如果您想保留您的代码
public static void deleteRepeats(char[] c, int size){
int i,j;
char temp;
char[] newArray = new char[size];
for(i=0; i < size; i++){
newArray[i] = c[i];
}
for(i = 0; i < size; i++){
for(j = i + 1; j < size; j++){
if(newArray[i] == newArray[j] && i != j){
temp = newArray[j];
for(int k = j; k < size - 1; k++){
newArray[k] = newArray[k + 1];
}
newArray[size-1] = temp;
}
}
}
for(i=0;i<size;i++){
System.out.print(newArray[i]+" ");
}
}
推荐阅读
- node.js - Passport.js 在提交表单时注销用户
- angular-material - 过滤垫树数据源后,所有选中的复选框都将取消选中
- flutter - 'Stream 类型的值
' 不能从函数 'user' 中返回,因为它的返回类型是 'Stream ? - python - 找不到不和谐服务器邀请的邀请人 ID
- typescript - ReplicationTime 不能用于此版本的复制配置架构
- javascript - 使用 ImageMapType 的 getTileUrl 方法时如何去除 poi?
- java - Java Mail SMTP 身份验证要求检查而不发送邮件
- javascript - 单击按钮后刷新页面(确定/取消)
- html - 如何删除该文本框上的黑色边框?
- apache-pulsar - 无法获取分区元数据:授权失败