22862号:最長偶数連続部分数列(大)-Swift
https://www.acmicpc.net/problem/22862丸いパン
難易度:シルバー1🥈
アルゴリズム分類:ダブルポインタ
🧐 質問へのアクセス
endポインタを1つずつ移動して、偶数か奇数かを決定します
S[end]が奇数であり、範囲内の奇数がKより大きい場合、奇数を1つ削除する前にstartポインタを+1する.
完全なコード
難易度:シルバー1🥈
アルゴリズム分類:ダブルポインタ
🧐 質問へのアクセス
endポインタを1つずつ移動して、偶数か奇数かを決定します
S[end]が奇数であり、範囲内の奇数がKより大きい場合、奇数を1つ削除する前にstartポインタを+1する.
完全なコード
//22862번 가장 긴 짝수 연속한 부분 수열(large)
//n,k 입력받기
let t = readLine()!.split(separator: " ").map{Int(String($0))!}
let (N,K) = (t[0],t[1])
//수열 S 입력받기
let S = readLine()!.split(separator: " ").map{Int(String($0))!}
var (start, end) = (0,0)
var deleteCount = S[start] % 2 == 0 ? 0 : 1
var maxLen = S[start] % 2 == 0 ? 1 : 0
while end < N-1 {
//endPointer를 한칸 오른쪽으로 옮긴다
end += 1
//옮긴 포인터가 홀수라면, deleteCount += 1
if S[end] % 2 != 0 {
deleteCount += 1
//deleteCount가 K를 초과했으면, start를 오른쪽으로 하나씩 당긴다
while deleteCount > K {
if S[start] % 2 != 0 {
deleteCount -= 1
}
start += 1
}
}
maxLen = max(maxLen, end - start + 1 - deleteCount)
}
print(maxLen)
一行评価:无言...Reference
この問題について(22862号:最長偶数連続部分数列(大)-Swift), 我々は、より多くの情報をここで見つけました https://velog.io/@aurora_97/백준-22862번-가장-긴-짝수-연속한-부분-수열-large-Swiftテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol