<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 输入一串数,以‘,’分隔,输出所有数中去掉最大值、最小值之后剩下的个数。(其中最大值与最小值可能有多个)</span>
Smple input :3,3,5,3,6,9,7,9
Sample outPut: 3
分析:
1)采用数组哈希法,但此处没有明确给定数字的范围,所以需要申请2的32次方个元素的素组,肯定不行啊。
2)使用HashMap,相对于数组哈希的算法来说,我只需要知道字符串里面有多少个数字就可以了,然后申请n大小的HashMap。在堆每个数组进行hash,hash的同时去掉多余的数字。然后,对HashMap中的数字进行排序。相对于第一种方法来说,已经好很多了。
还有没有更好的算法呢?来看看第三种方法。
3)采用红黑树,管都不管你有多少个数字,树中的每个节点都是动态的。同时,红黑树是会对取出重复的数字,并自动排序。通过迭代器就可以打印出排序好的数组。
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;
public class JinZhi
{
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
TreeSet<Integer> treeSet=new TreeSet<>();
String str=null;
if(scanner.hasNext())
{
str=scanner.next();
}
for (int i = 0,j=0; i < str.length(); i++)
{
if (str.charAt(i)==',')
{
String temp=str.substring(j, i);
treeSet.add(Integer.valueOf(temp));
j=i+1;
}
}
Iterator<Integer> iterator=treeSet.iterator();
int j=0;
if (treeSet.size()<=2)
{
System.out.println(0);
return;
}
else {
System.out.println(treeSet.size()-2);
return;
}
}