美團——股票交易日、二維陣列列印、奇數位丟棄、字元編碼(哈弗曼編碼)
阿新 • • 發佈:2019-02-05
股票交易日和二維陣列列印這兩道題就是time to sell stock和蛇形矩陣。
題目奇數位丟棄:(關於LinkedList和listIterator的使用)
對於一個由0..n的所有數按升序組成的序列,我們要進行一些篩選,每次我們取當前所有數字中從小到大的第奇數位個的數,並將其丟棄。重複這一過程直到最後剩下一個數。請求出最後剩下的數字。輸入描述:
每組資料一行一個數字,為題目中的n(n小於等於1000)。
輸出描述:
一行輸出最後剩下的數字。
輸入例子:
500
輸出例子:
255
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); LinkedList<Integer> list=new LinkedList(); for(int i=0;i<=n;i++){ list.add(i); } while(list.size()!=1){ Iterator<Integer> it=list.listIterator(0);//使用迭代器遍歷並刪除元素 int index=1; while(it.hasNext()){ Integer temp=it.next(); if(index%2 == 1){ it.remove(); } index++; } } System.out.println(""+list.peekFirst()); } in.close(); } }
題目描述:字元編碼
請設計一個演算法,給一個字串進行二進位制編碼,使得編碼後字串的長度最短。輸入描述:
每組資料一行,為待編碼的字串。保證字串長度小於等於1000。
輸出描述:
一行輸出最短的編碼後長度。
輸入例子:
MT-TECH-TEAM
輸出例子:
33解析:利用哈弗曼編碼規則進行編碼,並返回編碼後的長度。哈弗曼編碼是字首碼,即字元編碼長度不相同,但是沒有字元程式碼是別的字元程式碼的字首。
哈弗曼編碼步驟:
1.蒐集資料頻率;
2.根據頻率構建哈弗曼樹進行編碼。將森林合併成一顆編碼中定義的滿樹(所有的結點要麼是樹葉,要麼有兩個孩子,且字元都在孩子上,而從根節點到孩子結點路徑的左右為該字元的二進位制編碼序列)。