CCF電腦職業資格認證 2015年3月第2題 數字排序 解法和思路

來源:互聯網
上載者:User

標籤:tis   array   數組   相等   .so   static   name   add   null   

問題描寫敘述  給定n個整數,請統計出每一個整數出現的次數,按出現次數從多到少的順序輸出。

輸入格式  輸入的第一行包括一個整數n,表示給定數位個數。
  第二行包括n個整數,相鄰的整數之間用一個空格分隔。表示所給定的整數。

輸出格式  輸出多行。每行包括兩個整數,分別表示一個給定的整數和它出現的次數。

按出現次數遞減的順序輸出。假設兩個整數出現的次數一樣多,則先輸出值較小的,然後輸出值較大的。

例子輸入12
5 2 3 3 1 3 4 2 5 2 3 5例子輸出3 4
2 3
5 3
1 1
4 1評測用例規模與約定

  1 ≤ n ≤ 1000,給出的數都是不超過1000的非負整數。



思路:此題不算非常難,最難的點在相等的次數要以值最小的先輸出,也就是先按字數降序排列。次數一致的再按整數升序排列,最後輸出。

一開始是想著一個TreeMap解決,然後按V值排序,這樣提交時,僅僅得70分。有case只是。後面想著還是再寫一個類儲存num和count吧,再實現comparator介面。

按規則排序就可以。

代碼可能不是非常精簡,如有更好的方法,能夠跟帖說明。

代碼例如以下:

package sds;import java.util.*;public class Main {public static void main(String[] args){//接受輸入Scanner sc = new Scanner(System.in);int n = sc.nextInt();//得到數組aint[] a = new int[n];for(int i = 0; i < n; i++){a[i] = sc.nextInt();}//統計次數Map<Integer,Integer> map = new HashMap<Integer, Integer>();for(int i = 0; i < n; i++){if(map.get(a[i]) == null){map.put(a[i],1);}else{map.put(a[i],map.get(a[i]) + 1);   }}        ValueComparator bvc =  new ValueComparator();          List<NumCount> list = new ArrayList<NumCount>();        //加入到list        for(int key:map.keySet()){        NumCount count = new NumCount(key, map.get(key));        list.add(count);        }        Collections.sort(list, bvc);//排序        //列印        for(int i = 0; i < list.size();i++){        System.out.println(list.get(i).getNum() + " " + list.get(i).getCount());        }}}//實現排序class ValueComparator implements Comparator<NumCount> {@Overridepublic int compare(NumCount o1, NumCount o2) {if(o1.getCount() > o2.getCount())return -1;//降序排列if(o1.getCount() < o2.getCount())return 1;if(o1.getNum() > o2.getNum())return 1;//假設次數同樣,再按整數升序if(o1.getNum() < o2.getNum())return -1;return 0;}  }  //儲存數字和次數class NumCount{private int num;private int count;public NumCount(int num,int count) {this.num = num;this.count = count;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}



CCF電腦職業資格認證 2015年3月第2題 數字排序 解法和思路

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.