投稿

ゼロから始めるLeetCode Day105「111. Minimum Depth of Binary Tree」

概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day104「103. Binary Tree Zigzag Level Order Traversal」 次回 ゼロから始めるLeetCode Day106「209. Minimum Size Subarray Sum」 Twitter やってます。 問題 111. Minimum Depth of Binary Tree 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、二分木が与えられた場合、その最小深度を求めよ、というものです。 なお、最小深度とは、ルートノードから最も近い葉までの最短経路に沿ったノードの数である。 注意:葉とは,子を持たないノードのことである。 解法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution : def

ゼロから始めるLeetCode Day104「103. Binary Tree Zigzag Level Order Traversal」

概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day103「122. Best Time to Buy and Sell Stock II」 次回 ゼロから始めるLeetCode Day105「111. Minimum Depth of Binary Tree」 Twitter やってます。 問題 103. Binary Tree Zigzag Level Order Traversal 難易度はMedium。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、二分木が与えられた場合、そのノードの値のジグザグレベル順のトラバーサルを返すという問題です。 (左から右へ、次のレベルでは右から左へ、その間では交互に)。(つまり、左から右へ、そして次のレベルは右から左へ、そしてその間を交互に) For example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its zigzag level order traversal as: [ [3], [20,9], [15,7] ] 解法 # Definition for a binary tree

楽しく解くCpawCTF Level1

目的 環境 CpawCTF Level1 Q1.[Misc] Test Problem Q6.[Crypto] Classical Cipher Q7.[Reversing] Can you execute ? Q8.[Misc] Can you open this file ? Q9.[Web] HTML Page Q10.[Forensics] River Q11.[Network]pcap Q12.[Crypto]HashHashHash! Q14.[PPC]並べ替えろ! まとめ 目的 ネットワークやセキュリティなどの勉強はしたいが実際に何から手をつけたら良いのか分からない・・・ 無料でコンテスト形式の何かに取り組みたい といった人におすすめなのがCTF! 基本的にはチーム形式でセキュリティやネットワークの問題を解く、というコンテストで頻繁に開催されているため、楽しく学べます。 僕も最近始めたばかりで、ひとまず基本的なことを学ぶために一人で簡単なものから解いています。 環境 MacOS Catalina 10.15.4 Ubuntu 64-bit(VM) CpawCTF Level1 現在解いているのはこちらの CpawCTF で、初学者でも楽しくクイズ形式で学ぶことができます。 今回はLevel1を全て埋めたので内容について触れていきたいと思います。 なお、解答については触れません。 どういう風に解いたかに焦点を当てていきたいと思います。 Q1.[Misc] Test Problem この問題の答え(FLAG)は、 cpaw{this_is_Cpaw_CTF} です。 下の入力欄にFLAGを入力してSubmitボタンを押して、答えを送信しましょう! 記念すべき第一問。どういった形式で解答すればよいかを教えてくれます。 このコンテストでは基本的に cpaw{flag} といった形式で、 cpaw の部分は固定で、それ以降の {} の中にそれぞれの問題を解いた時に得られる flag を入れることで正解かどうかを判定します。 これがCTFがCatch the flagと呼ばれる所以ですね。 とにもかくにも解答の方法は基本的にこういった形なので理解するにはうってつけ

ゼロから始めるLeetCode Day103「122. Best Time to Buy and Sell Stock II」

概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day102「322. Coin Change」 次回 ゼロから始めるLeetCode Day104「103. Binary Tree Zigzag Level Order Traversal」 Twitter やってます。 問題 122. Best Time to Buy and Sell Stock II 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、 ith の要素が i 日目に指定された株式の価格である配列の価格を与えられます。 最大の利益を見つけるためにアルゴリズムを設計します。あなたは好きなだけ多くのトランザクションを完了することができます。 なお、再び購入する前に株式を売却する必要があります。 Example 1: Input: [7,1,5,3,6,4] Output: 7 Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4. Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3

ゼロから始めるLeetCode Day102「322. Coin Change」

概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day101「387. First Unique Character in a String 次回 ゼロから始めるLeetCode Day102「322. Coin Change」 Twitter やってます。 問題 322. Coin Change 難易度はMedium。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、異なる額面のコインと合計金額が与えられます。その金額を作るのに必要なコインの数が最も少ないコインを計算する関数を実装してください、という問題です。なお、コインのどの組み合わせでもその金額を作ることができない場合は、-1を返す。 Example 1: Input: coins = [1, 2, 5], amount = 11 Output: 3 Explanation: 11 = 5 + 5 + 1 Example 2: Input: coins = [2], amount = 3 Output: -1 解法 典型的なナップザック問題ですね。 ちなみにナップザック問題というのは このような もので、与えられた条件の中から最適な場合を求めるための例として挙げられる問題群のことです。 そして、それら

ゼロから始めるLeetCode Day101「387. First Unique Character in a String

概要 問題 解法 概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day100「108. Convert Sorted Array to Binary Search Tree」 次回 ゼロから始めるLeetCode Day102「322. Coin Change」 Twitter やってます。 問題 387. First Unique Character in a String 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、文字列が与えられるので、その中から最初の反復されない文字(文字列の中に一度しか表示されない文字)を見つけ、そのインデックスを返す、というものです。なお、存在しない場合は -1 を返します。 Examples: s = “leetcode” return 0. s = “loveleetcode” return 2. 解法 軽くサクサクっと解けるような考え方としては Counter を使うと手っ取り早いですね。 collections.Cpunter を使うと文字列の中にどの文字が何回表示されるかを出してくれます。 例えば、今回のテストケースである leetcode の場合は以下のようになります。 count = collections

ゼロから始めるLeetCode Day99 「112. Path Sum」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day98「39. Combination Sum」 次回 ゼロから始めるLeetCode Day100「108. Convert Sorted Array to Binary Search Tree」 Twitter やってます。 問題 112. Path Sum 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、二分木と和が与えられたとき、その木がルートから葉へのパスを持ち、パスに沿ってすべての値を加算すると、与えられた和に等しくなるかどうかを判断してください、というものです。 Example: Given the below binary tree and sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1 return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22. 解法 スタックを使って解きました。 # Definition for a binary tree node. # class TreeNode: