Smile9870

1002. A+B for Polynomials (25)

主要思路:创建一个TreeMap,每个多项式对应k项依次输入指数系数,哈希表key值为指数,value值为系数。每次输入一对值,
把相同指数对应的系数相加,就是两个多项式的和。结果的非零项数为哈希表中value值不为0.0的项数(系数可能有正有负相加为零)
题目要求按指数降序输出,而java的TreeMap是是利用comparator 进行key的自然排序的,对应整数是升序排列的,所以要逆向
遍历表输出,且同时判断系数是否为0.0。至于TreeMap的反向遍历,我暂时搜不到简便的方法,就模拟了一个堆栈(其实建立堆栈并访
问也挺简单。
HashMap是按照key的HashCode排序的
TreeMap是是利用comparator 进行key的自然排序的。
LinkedHashMap是按照元素加入的顺序。


import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; class Inf{ int a; double b; } public class Main {static Scanner sc = new Scanner(System.in); static TreeMap<Integer, Double> map = new TreeMap<Integer, Double>(); static int k, a; static double b; static int sum=0; static int pos=0; public static void main(String[] args) { // TODO Auto-generated method stub k = sc.nextInt(); vo(k); k = sc.nextInt(); vo(k); for(Entry<Integer,Double>entry:map.entrySet()) { if(entry.getValue()!=0.0&&entry.getValue()!=-0.0) { sum++; } } System.out.print(sum); Inf[] stack=new Inf[map.size()]; for(int i=0;i<map.size();i++) { stack[i]=new Inf(); } for(Entry<Integer,Double> entry:map.entrySet()) { if(entry.getValue()!=0.0) { stack[pos].a=entry.getKey(); stack[pos++].b=entry.getValue(); } } for(int i=pos-1;i>=0;i--) { System.out.printf(" %d %.1f",stack[i].a,stack[i].b); } } static void vo(int k) { for (int i = 0; i < k; i++) { a = sc.nextInt(); b = sc.nextDouble(); if (map.containsKey(a) == false) { map.put(a, b); } else { map.put(a, map.get(a) + b); } } } }

如有改进建议请提出,不胜感激!

 

posted on 2018-01-02 20:19  Smile9870  阅读(153)  评论(0编辑  收藏  举报

导航