java java輸入一個字符串,可包含中文,要求查找其中出現次數最多的字符,并將其出現次數一并輸出?
java輸入一個字符串,可包含中文,要求查找其中出現次數最多的字符,并將其出現次數一并輸出?導入java.util.HashMap文件導入java.util.Iterator導入java.util.S
java輸入一個字符串,可包含中文,要求查找其中出現次數最多的字符,并將其出現次數一并輸出?
導入java.util.HashMap文件
導入java.util.Iterator
導入java.util.Set
public class Test5
{
public static void main(String[]args)
{
HashMap map=new HashMap()
for(int k=0k&長度)
{
如果(地圖。獲?。╝rgs[k])==null)
{地圖輸入(args[k],新整數(1))
}
else
{
Integer in=(整數)地圖。獲?。╝rgs[k])
in=新整數(in.int值() 1)
地圖輸入(args[k],in)
}
集=映射密鑰集()
for(Iterator it=集合迭代器() 它。下一個())
{
字符串鍵=(字符串)它。下一個()
整數值=(整數)地圖。獲?。ㄦI)系統(tǒng)輸出打?。╧ey“:”value)
}]}]試試看
挑戰(zhàn)程序員同學,如何只用2GB內存從20/40/80億個整數中找到出現次數最多的數?
1、4字節(jié)表示的整數數為2^32≈40億,2字節(jié)表示的無符號整數數為2^16≈60000。
2、2G=2^31b≈20億字節(jié)。
3、為了找出出現次數最多的數字,應記錄每個數字的出現次數。最快的方法是記錄每個數字在內存中出現的次數。記錄方法是記錄相應的存儲器地址數和相應地址的存儲器單元數。但是,2G內存只能記錄20億字節(jié)的數字,如果每個數字的出現次數大于255則會發(fā)生溢出,沒有風險。因此,這種方案是不可取的。
4、這樣,磁盤上只能記錄每次出現的次數。這樣,就在磁盤上創(chuàng)建了一個16g文件。每4個字節(jié)對應一個整數,可以對應40億個整數。用于記錄相應整數的個數。
1. 初始化文件。
2. 依次讀取數據并用無符號整數記錄在磁盤文件中。如果發(fā)生溢出,則該數字是次數最多的數字。
3. 從文件中讀取每個數字的次數,用變量a記錄最高次數,用變量B記錄最高次數的數據,用文件依次記錄最高次數的數據。當最大次數增加時,a1和B被設置為1,并且該數字被寫入文件中。當出現相同次數的數字b1時,該數字被寫入文件的相應位置,直到全部被讀取為止。
所以您根本不需要2G內存。