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

<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;
		}
}

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值