機械学習好きのメモ帳

MMのメモ帳

機械学習、データ分析、アルゴリズムなどを扱っていきます。雑記も含まれます。

Daily Coding Problemからの問題

はじめに

Daily Coding Problemというサービスがあったので登録してみました。これは毎朝(確認してみたらAM2:30でした)にGoogleamazonなどの選考フローで出されたCoding Interviewの問題を一問送ってくれるサービスです。今回は初めてきた問題を解いてみました。
www.dailycodingproblem.com

問題

Given a list of numbers and a number k, return whether any two numbers from the list add up to k.

For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.

Bonus: Can you do this in one pass?

一つのリストとある数kが与えられた時、リストの中の二つの数を足してkになるかどうかの判定を返せ。
こんな感じの問題ですかね。シンプルな問題だと思います。

実装

メールのタイトルにもEasyとついていましたが、アルゴリズム力も実装力もない自分は一つの方法しか実装できませんでした。
全ての数を総当たりで調べていく方法です。(これすらも正しく実装できているか不安ですが・・・)

def find_num2k_roundrobin(list, k):
    for i in list:
        for j in list:
            if j + i == k:
                return True
                break
    return False

計算量はO(n^2)かな。多分もっと早い手法があると思います。

まとめ

こんな風に毎日問題が届いてそれを解いていくという感じです。Premiumにしたら次の日の朝に解放が送られてくるそうです。
しばらくは無課金で様子見します。あと今日届いた「問題解決のPythonプログラミング」も活用してプログラミング力を上げていきたいと思います。

問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考

問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考