SRM 574 250 DIV2
2013-06-28 23:28
288 查看
菜鸟的代码:
大神的代码(java):
大神的代码(C++):
分析:
算法:数数
对比:
1.C++版的大神和我做得差不多。
2.JAVA版的大神灵活地利用了HashMap,比较有意思,学习了哈。然后,这里明明可以不用StringBuilder的。
3.从空间复杂度的角度来考虑的话,最好还是申请长度是26的数组。虽然长度是256的时候真的很方便啊,尤其是大小写都存在的时候。
总结:
HashMap还是很不错的,学习了。
import java.util.*; import java.util.regex.*; import java.text.*; import java.math.*; public class CityMap { public String getLegend(String[] cityMap, int[] POIs) { int i,j; int[] count = new int[256]; char ch; StringBuilder sb = new StringBuilder(); for(i=0;i<cityMap.length;i++){ for(j=0;j<cityMap[i].length();j++){ ch= cityMap[i].charAt(j); if(ch!='.') count[ch]++; } } for(i=0;i<POIs.length;i++){ for(j=0;j<256;j++){ if(count[j]==POIs[i]) sb.append((char)j); } } return sb.toString(); } } //Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
大神的代码(java):
import java.util.HashMap; public class CityMap { public String getLegend(String[] c, int[] p) { int[] a = new int[26]; for(String s: c) for(char i: s.toCharArray()) if(i!='.')a[i-'A']++; HashMap<Integer, String> map = new HashMap<Integer, String>(); for(int i=0; i<a.length;i++) map.put(a[i], ""+(char)('A'+i)); String o=""; for(int i: p) o+=map.get(i); return o; } }
大神的代码(C++):
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <cstring> using namespace std; #define REP(i,n) for(int(i)=0;(i)<(int)(n);(i)++) #define RREP(i,n) for(int(i)=(n)-1;(i)>=0;(i)--) #define SZ(c) ((int)(c).size()) #define ITER(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++) #define FIND(x,c) ((c).find((x))!=(c).end()) class CityMap { public: string getLegend(vector <string>, vector <int>); }; string CityMap::getLegend(vector <string> cityMap, vector <int> POIs) { string ret=""; int a[30] = {0}; bool b[30] = {0}; REP(i,SZ(cityMap)) { string temp = cityMap[i]; REP(j,SZ(temp)) { if(temp[j]!='.') a[temp[j]-'A']++; } } REP(i,SZ(POIs)) { int j; for(j=0 ; j<26 ; j++) if(a[j]==POIs[i] && !b[j]) { ret+='A'+j; b[j]=true; break; } } return ret; } //Powered by [KawigiEdit] 2.0!
分析:
算法:数数
对比:
1.C++版的大神和我做得差不多。
2.JAVA版的大神灵活地利用了HashMap,比较有意思,学习了哈。然后,这里明明可以不用StringBuilder的。
3.从空间复杂度的角度来考虑的话,最好还是申请长度是26的数组。虽然长度是256的时候真的很方便啊,尤其是大小写都存在的时候。
总结:
HashMap还是很不错的,学习了。
相关文章推荐
- My solution for SRM 306 DIV2 [250]
- SRM 579 250 DIV2
- topcoder srm 610 div2 250
- 最小公倍数 SRM 661 Div1 250: MissingLCM
- SRM 574 DIV2
- TopCoder 250 points 11-SRM 149 DIV 1 86.62/250 34.65%
- SRM 578 250 DIV2
- SRM 585 DIV2
- topcoder SRM 548 DIV2 250
- topcoder SRM 637 div2+div1 250
- SRM 670 DIV 2 Cdgame 250-point
- SRM574 Div1 450
- SRM 719 Div 1 250 500
- 【topcoder SRM 652 DIV2 250】ValueOfString
- 小朋友学TopCoder(7):SRM726 DIV2 250-point
- SRM 554 div2
- SRM 574 DIV 2
- TopCoder 250 points 12-SRM 149 DIV 2 103.92/250 41.57%
- SRM 576 250 DIV2
- SRM DIV2 574 TheNumberGameDiv2