[Codility] 4. MaxCounters
6904 ワード
[Codility] 4. MaxCounters
質問リンク
MaxCounters
問題の概要
与えられた配列Aの値に基づいて、その要素の値を1だけ大きくするプラス記号(X)演算、または、その要素の値が与えられたN+1に等しいときに、すべての要素をMax値に変換する最大カウンタ演算が実行される.
アレイ内のすべての要素値を巡回し、最終アレイを返します.
要求
N and M are integers within the range [1..100,000]
each element of array A is an integer within the range [1..N + 1].
コード#コード#
for loopは、MaxValueを使用して反ARRを更新しません.
maxValueのみが巡回時に更新されます.ただし、N+1の場合はflag値が変更され、その要素が再びAの要素として指定された場合は、その要素に含まれる配列が直接変更されます.
最大値は変更されますが、更新されていない要素はmapとして処理され、flagと比較されます.import Foundation
import Glibc
public func solution(_ N : Int, _ A : inout [Int]) -> [Int] {
var counterArr = [Int](repeating: 0, count: N) // 0,0,0,0,0
var maxValue: Int = 0
var flagMaxValue: Int = 0
for element in A {
let counterIdx = element - 1
if(element < N + 1) {
//최대값이 갱신되었을 때(아직 CounterArr 배열에는 미반영)
if(counterArr[counterIdx] <= flagMaxValue) {
counterArr[counterIdx] = flagMaxValue + 1
} else {
counterArr[counterIdx] += 1
}
if(counterArr[counterIdx] > maxValue) {
maxValue = counterArr[counterIdx]
}
}
else { //element == N+1, 기준값 대입
flagMaxValue = maxValue
}
}
//CounterArr 반영
counterArr = counterArr.map {
if $0 < flagMaxValue {
return flagMaxValue
} else {
return $0
}
}
return counterArr
}
SWIFT長のアレイ宣言方法
var arr = [Int](repeating: 0, count: N) // 0,0,0,0,0
Reference
この問題について([Codility] 4. MaxCounters), 我々は、より多くの情報をここで見つけました
https://velog.io/@iseeu95/Codility-4.-MaxCounters
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import Foundation
import Glibc
public func solution(_ N : Int, _ A : inout [Int]) -> [Int] {
var counterArr = [Int](repeating: 0, count: N) // 0,0,0,0,0
var maxValue: Int = 0
var flagMaxValue: Int = 0
for element in A {
let counterIdx = element - 1
if(element < N + 1) {
//최대값이 갱신되었을 때(아직 CounterArr 배열에는 미반영)
if(counterArr[counterIdx] <= flagMaxValue) {
counterArr[counterIdx] = flagMaxValue + 1
} else {
counterArr[counterIdx] += 1
}
if(counterArr[counterIdx] > maxValue) {
maxValue = counterArr[counterIdx]
}
}
else { //element == N+1, 기준값 대입
flagMaxValue = maxValue
}
}
//CounterArr 반영
counterArr = counterArr.map {
if $0 < flagMaxValue {
return flagMaxValue
} else {
return $0
}
}
return counterArr
}
var arr = [Int](repeating: 0, count: N) // 0,0,0,0,0
Reference
この問題について([Codility] 4. MaxCounters), 我々は、より多くの情報をここで見つけました https://velog.io/@iseeu95/Codility-4.-MaxCountersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol