--------------[感谢小郡提供的图片]
老师“这道题有难度!比上面难”
我“啊哈!interesting!”直接开工做这个题。初读题我发现其在表述上很发散可以有多种情况 ,没给数据类型没给数组内部格式
我“您没规定那我就自由发挥了”
:)
我当时想到两种情况。
1.数组只含有大小写字母,数字等字符数据类型
package day06_homework;
import java.util.Scanner;
/**
* 已知一个数组存在重复元素,请去掉数组中的重复元素。
*
*/
public class Number07 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入字符串");
String string = scan.nextLine();
char line[]=string.toCharArray();
int illegal=0;
int number [] = new int[62];
char Hashcode[] = new char[]{'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',
'R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
'r','s','t','u','v','w','x','y','z'};//数字 字母
for(int i=0;i<line.length;i++){
if(line[i]>='0'&&line[i]<='9'){
number[line[i]-'0']+=1;
}else if(line[i]>='A'&& line[i]<='Z'){
number[line[i]-'A'+10] +=1;
}else if(line[i]>='a'&& line[i]<='z'){
number[line[i]-'a'+36] +=1;
}else{
illegal+=1;
}
}
for(int i=0;i<62;i++){
if(number[i]>=1){
System.out.println(Hashcode[i]);
}
}
}
}
[在变量,包名,类的命名上可能没遵守规范后面会加快熟悉命名规范]
- 这里我想到的是用哈希,我理解的哈希是“映射”高度概括是种key-value的映射,求key 然后用某种数据结构映射到value 这个value可能不是最终的value 根据情况在加操作得出最后的value.
- 最坏的情况和最好的情况的都要执行第一个for循环所以这个算法的时间复杂度是O(n)
2.数组中有大小写字符,数字(char),空格,!@#....等等特殊符号
暂时想到这里,我还没想到解法 ,欢迎各位网友集思广益想答案,我会在@auther注释中注明姓名或者网友ID
上面内容会维护更新有新想法和解法都会添加进去,希望有更简洁更优美效率更高的代码网友私信我答案共同学习交流,我会在明显的地方注明作者和鸣谢。