华为上机题之去除字符串中最大最小的数

来源:互联网 发布:c语言mod 编辑:程序博客网 时间:2024/04/29 21:12
<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;}}

    

0 0