MySQLのこと。

MySQLのことについてまとめているブログ。他人に見せる用でもなく、自分の勉強備忘録。検索インデックスも外してるので、辿りついた方・・・ようこそ。そんな大した情報ないですよ?!たまにアルゴリズムの練習も

リストを分割し、最初の部分を最後にくっつける

問題

今日はSplit the arrays and add the first part to the endの問題にチャレンジ。これは、指定されたkのインデックスの位置でリストを分割し、それらをスワップして、最初の部分をリストのお尻に持ってくるという問題。

Input: [12, 10, 5, 6, 52, 36]
k = 2
Output: [5, 6, 52, 36, 12, 10]

kが2なので、リストを[12, 10]と[5, 6, 52, 36]に分割し、最初の部分を最後にくっつけることで、このような[5, 6, 52, 36,12, 10]というリストを作成するという問題。

実装

お題がリストを「スプリット」してうんたらとあるが、下記の画像のように、スプリットして結合することと、ローテションすることは最終的には同じことができるので、そのように問題を焼き直すとローテション問題と考えることができるので、これまでと同じようにローテションさせる。

f:id:AZUMINO:20210209124643j:plain


from typing import List

def split_list(numbers: List[int], k: int) -> List[int]:
    len_numbers = len(numbers)

    for i in range(0, k):
        tmp = numbers[0]
        for j in range(0, len_numbers - 1):
            numbers[j] = numbers[j + 1]

        numbers[len_numbers - 1] = tmp

    return numbers


if __name__ == '__main__':
    numbers = [12, 10, 5, 6, 52, 36]
    k = 2
    print(split_list(numbers, k))

[5, 6, 52, 36, 12, 10]