由於題目資料量比較小,故可以開闢一個陣列儲存每個index出現的次數
然後遍歷即可
string canItBeDone(int k, vector<int> A){ vector<int> cnt(52,0); int n = A.size(); for(int i = 0 ; i < n; ++ i) cnt[A[i]]++; for(int i = 1 ; i <=n ; ++ i){ if(cnt[i] !=0 ){ cnt[i] -- ; }else{ bool flag = false; for(int j = 1 ; j < i; ++ j ){ if(cnt[j] &&(i-j)%k == 0){ cnt[j]--; flag = true; break; } } if(!flag) return "IMPOSSIBLE"; } } return "POSSIBLE"; }
如果資料量比較大,可以考慮用hash_map儲存
string canItBeDone(int k, vector <int> A) { map<int,int> kmap; for(int i = 0 ; i < A.size(); ++ i){ if(kmap.find(A[i])!=kmap.end()){ kmap[A[i]]++; }else{ kmap.insert(make_pair(A[i],1)); } } for(int i = 1; i <= A.size(); ++ i){ if(kmap.find(i)!=kmap.end()){ kmap[i]--; if(kmap[i] == 0) kmap.erase(i); }else{ bool flag = false; for(map<int,int>::iterator iter = kmap.begin(); iter!=kmap.end(); iter++){ if((i-iter->first)>0 &&(i-iter->first)%k ==0){ iter->second--; flag = true; if(iter->second == 0){ kmap.erase(iter); } break; } } if(!flag) return "IMPOSSIBLE"; } } return "POSSIBLE"; }