美团——股票交易日、二维数组打印、奇数位丢弃、字符编码(哈弗曼编码)

股票交易日和二维数组打印这两道题就是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 list=new LinkedList();for(int i=0;i<=n;i++){list.add(i);}while(list.size()!=1){Iterator 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.根据频率构建哈弗曼树进行编码。将森林合并成一颗编码中定义的满树(所有的结点要么是树叶,要么有两个孩子,且字符都在孩子上,而从根节点到孩子结点路径的左右为该字符的二进制编码序列)。








本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部