2017年11月2日木曜日

スタック内の最小値を返すスタッククラスを作成する

問題:スタック内の最小値を返すスタッククラスを作成する


カスタムしたクラス内に最小値を保存スタックを持つことで、
簡潔にコードを書くことができます。

pushするときにカスタムスタッククラス内のスタックメンバーの最小値を
チェックし、最小ならばpushする。

popも同様の処理を行うことで、最小値を保持するスタックが完成します。

kotlinでのサンプルを載せます。

import java.util.Stack

class StackWithMin : Stack(){
    var stack : Stack = Stack()

    override fun push(value : Int): Int? {
        if(value < getMin()){
            stack.push(value)
        }
        return super.push(value)
    }

    fun getMin() : Int {
        if(stack.isEmpty()){
            return Integer.MAX_VALUE
        }
        else{
            return stack.peek()
        }
    }

    override fun pop() : Int{
        val value = super.pop()
        if(value == getMin()){
            stack.pop()
        }
        return value
    }
}

続いてmain関数での実行例です。

fun main(args : Array){
    var stack : StackWithMin = StackWithMin()
    stack.push(100)
    stack.push(50)
    stack.push(1)
    // 1
    println(stack.getMin())
    stack.pop()
    // 50
    println(stack.getMin())
    stack.pop()
    // 100
    println(stack.getMin())

}

0 件のコメント:

コメントを投稿