###### tags: `apcs` `解題筆記` `歷屆練習` `自主學習` {%hackmd BJrTq20hE %} Map題型練習 === ## Map 一個key對一個value,可以快速運算重複的值或是需要對照的題型 ## [APCS歷屆:美麗的彩帶](https://zerojudge.tw/ShowProblem?problemid=e289)  用HashMap儲存顏色的數量,每次加一個就去頭,再判斷長度是否為m ```java= import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class zj_e289{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Map<String,Integer> map = new HashMap<>(); String[] d = br.readLine().split(" "); int m = Integer.parseInt(d[0]); int n = Integer.parseInt(d[1]); d = br.readLine().split(" "); int ans = 0; for(int i = 0;i < n;i++) { //存在的話+1 if(map.containsKey(d[i])) { map.put(d[i],map.get(d[i]) + 1); } //不存在,設1 else map.put(d[i], 1); if(i > m - 1) { //去頭,數量變0就刪掉 int x = map.get(d[i-m]) - 1; if(x == 0) map.remove(d[i-m]); else map.put(d[i-m],x); } //長度為m時代表是一個完美彩帶 if(map.size() == m) ans++; } System.out.println(ans); } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up