投稿

ゼロから始めるLeetCode Day100「108. Convert Sorted Array to Binary Search Tree」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day99 「112. Path Sum」 次回 ゼロから始めるLeetCode Day101「387. First Unique Character in a String Twitter やってます。 問題 108. Convert Sorted Array to Binary Search Tree 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、要素が昇順にソートされた配列が与えられた場合,それを高さバランスのとれた二分探索木に変換してください、というものです。 この問題では、二分探索木とは,各ノードの2つの部分木の深さが1以上異なることがない二分木と定義されます。 Example: Given the sorted array: [-10,-3,0,5,9], One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST: 0 / \ -3 9 / / -10 5 解法 # Definition for a binary tree node. # class

CTFに入門した話。

CTFを始めたよ! CTFとは 現段階の進捗 これからの予定 CTFを始めたよ! ということで。 LeetCodeを100回解いたので今度は新しくセキュリティ領域に手を出そうかと思います。全体的にセキュリティ、ネットワークは知ってて当然ですよね。って感じがしたのでゲーム形式で参加できそうなこちらで勉強していこうかなと。 CTFとは Capture the flagの略。 いわゆる竸プロのセキュリティ領域版みたいなもので、特定の問題をこなすとflagというものが与えられ、それを入力するとポイントが加算され、より多くのポイントを集めた人が勝ち!という至極簡単なルール。 現段階の進捗 とりあえずCpawCTFをやってみたけど楽しい。 与えられたファイルを解析してflagを取るために立てたVM上でUbuntuを動かそうとして少し詰まったのは秘密 とある方がシステム設計とかの勉強にはpicoCTFとかいいんじゃね?って記事で書いてたけど、あのレベルですら調べないと詰まったので本当に基礎の基礎から学び直します。 あ!もちろんハリネズミ本は買いましたよ!というかハリネズミ本を買った後コンテストの存在を知りました。 セキュリティ本を含め、近所のブックオフで技術書を衝動買いしてしまったのでじっくり消化できるようにしないと。 今の段階でCpawCTFを数問解いただけだけど、こんな世界もあるのかっていうLeetCodeを解き始めた時と同じような気持ちで取り組めているので非常に良い。 何事も楽しいのは大事。 これからの予定 割とアルゴリズムとデータ構造を勉強するためにLeetCodeをガリガリ解いてきたんですけど、途中まで解いていた60問の内、残りを解いてしっかり復習をしようかなと。毎日解いてはいたけど、いざ思い返すと厳しい問題もあると思うし、確実に解ける問題を増やしていくのが目的なので。 僕は数学的に飛び抜けた資質がなければ、そこを今から突出できるまで伸ばす気もないので、競技プログラミングみたいなとんでもない才能と努力家揃いの領域に手を出そうとは思いませんし、むしろ確実に解ける領域をコツコツ作ることの方が大事だと思うので、解いて満足みたいなことはしないようにしたいです。 てなわけでしばらくは今まで解いてきたLeetCodeの復習と新

ゼロから始めるLeetCode Day98「39. Combination Sum」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day97 「349. Intersection of Two Arrays」 次回 ゼロから始めるLeetCode Day99 「112. Path Sum」 Twitter やってます。 問題 39. Combination Sum 難易度はMedium。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、候補番号(候補)(重複なし)と目標番号(目標)の集合が与えられたとき、候補番号の和が目標になるような、候補の中のすべてのユニークな組み合わせを求めなさい、というものです。 なお、同じ繰り返し数は何度でもいいとします。 Example 1: Input: candidates = [2,3,6,7], target = 7, A solution set is: [ [7], [2,2,3] ] Example 2: Input: candidates = [2,3,5], target = 8, A solution set is: [ [2,2,2,2], [2,3,3], [3,5] ] 解法 class Solution : def combinationSum ( self , candidates

ゼロから始めるLeetCode Day96 「78. Subsets」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day95「82. Remove Duplicates from Sorted List II」 次回 ゼロから始めるLeetCode Day97 「349. Intersection of Two Arrays」 Twitter やってます。 問題 78. Subsets 難易度はMedium。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、異なる整数の集合 nums が与えられます。 その中の可能なすべての部分集合を返します。 なお、解の集合には重複した部分集合を含んではいけません。 Example: Input: nums = [1,2,3] Output: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 解法 class Solution : def subsets ( self , nums : List [ int ] ) - > List [ List [ int ] ] : ans = [ ] def dfs ( temp , end ) : ans . append (

ゼロから始めるLeetCode Day97 「349. Intersection of Two Arrays」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day96 「78. Subsets」 次回 ゼロから始めるLeetCode Day98「39. Combination Sum」 Twitter やってます。 問題 349. Intersection of Two Arrays 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、2つの配列が与えられたとき,その交点を計算する関数を書いてくださいというものです。 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2] Example 2: Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Output: [9,4] 解法 class Solution : def intersection ( self , nums1 : List [ int ] , nums2 : List [ int ] ) - > List [ int ] : set1 , set2 = set ( nums1 ) , set ( nums2 ) return list ( set1 &a

ゼロから始めるLeetCode Day95「82. Remove Duplicates from Sorted List II」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day94 「929. Unique Email Addresses」 次回 ゼロから始めるLeetCode Day96 「78. Subsets」 Twitter やってます。 問題 82. Remove Duplicates from Sorted List II 難易度はMedium。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、ソートされた連結リストが与えられた場合、重複した番号を持つすべてのノードを削除し、元のリストとは異なる番号のみを残します。 同様にソートされた連結リストを返します。 Example 1: Input: 1->2->3->3->4->4->5 Output: 1->2->5 Example 2: Input: 1->1->1->2->3 Output: 2->3 解法 # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val #

ゼロから始めるLeetCode Day94 「929. Unique Email Addresses」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day93 「49. Group Anagrams」 次回 まだ Twitter やってます。 問題 929. Unique Email Addresses 難易度はEasy。 コーディング面接対策のために解きたいLeetCode 60問 からの抜粋です。 問題としては、すべての電子メールは、@記号で区切られたローカル名とドメイン名で構成されています。 例えば、alice@leetcode.com では、alice がローカル名で、 leetcode.com がドメイン名です。 小文字の他に、これらの電子メールには ‘.‘や’+‘が含まれている場合があります。 メールアドレスのローカル名の一部の文字の間にピリオド(’.’)を追加すると、ローカル名のドットがない同じアドレスに送信されたメールが転送されます。 例えば、「alice.z@leetcode.com」と「alicez@leetcode.com」は同じメールアドレスに転送されます。 (この規則はドメイン名には適用されませんのでご注意ください)。 ローカル名にプラス(’+’)を追加した場合、最初のプラス記号以降はすべて無視されます。これにより、特定のメールをフィルタリングすることができます。例えば、m.y+name@email.com は my@email.co