スキップしてメイン コンテンツに移動

投稿

6月, 2020の投稿を表示しています

ゼロから始めるLeetCode Day71 「1496. Path Crossing」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day70 「295. Find Median from Data Stream」 次回 ゼロから始めるLeetCode Day72 「1498. Number of Subsequences That Satisfy the Given Sum Condition」 Twitter やってます。 問題 1496. Path Crossing 難易度はEasy。 一番新しく追加されたEasyの問題です。 問題としては、path[i] = ‘N’, ‘S’, ‘E’, ‘W’ のような文字列のパスが与えられたとき,それぞれ1単位の移動を表す.2 次元平面上の原点 (0, 0) を起点とし、path で指定されたパス上を歩きます。 パスが任意の点で交差している場合、つまり以前に訪れたことのある場所にいる場合はTrueを返します。それ以外の場合は False を返します。 画像の関係で例を貼れないので各自確認をよろしくお願いいたします。 解法 x,yで座標を管理して最初の座標をdictで管理する、という方法を取りました。 うーん。 あまりスマートではないと思うのですが、pathをfor文で回して各文字列と一致するならば座標を変更するというものです。 しかしこれでも回答数が少ないせいかスピード自体は上位なんですよね・・

ゼロから始めるLeetCode Day70 「295. Find Median from Data Stream」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day69 「279. Perfect Squares」 次回 ゼロから始めるLeetCode Day71 「1496. Path Crossing」 Twitter やってます。 問題 295. Find Median from Data Stream 難易度はHard。 Top 100 Liked Questionsからの抜粋です。 問題としては、クラスの実装になります。 中央値は、順序付き整数リストの中間値です。リストのサイズが偶数の場合、中間値はありません。したがって、中央値は2つの中間値の平均値となります。 例えば、 [2,3,4] 中央値は3 [2,3] 中央値は(2 + 3) / 2 = 2.5 以下の2つの操作をサポートするデータ構造体を設計します。 void addNum(int num) - データストリームからデータ構造体に整数値を追加します。 double findMedian() - これまでのすべての要素の中央値を返します。 Example: addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) findMedian() -> 2 解法 平均値ではなく中央値であることを念頭において、その部分を

ミニマリストの僕がComplyのAirPods Pro用のイヤーピースを買ってみたら神だった件。

事の発端 AirPods Proを買った話はこちら ミニマリストの僕がPowerBeatsProをやめてAirPods Proに切り替えた話 でしたのですが、AirPods Proには一つだけ不満な部分がありました。 「これ、ジムでトレーニングしてる時に普通に落ちそうになるんですけど??」 そう、僕は耳の穴が普通の人よりでかいのだ。 純正のLサイズのイヤーピースを付けてもランニングなどをすると落ちそうになる、ベンチプレスをしようとすると落ちそうになるなどそこだけが不満だった。 「あかん・・・!!これじゃストレス解消の運動でストレスが溜まってまう・・・!!!」 という事で僕みたいな耳デカ族にも合うようなイヤーピースを探し始めました。 実際に探す とりあえずAmazonで探し始めるも、どれもこれも中華製でなかなか信頼できそうなものがない。 余談ですけど最近のAmazonって悪い評価をみる方が当てになりますよね。 実名っぽいレビューは読み飛ばすようになりました。 話を元に戻して、色々と彷徨っていたら昔使用していたComplyがAirPods Pro用のイヤーピースを出しているとのこと。 レビュー動画をみる限り、しっかりとケースもしまるし、あのComplyの製品だから信頼度も高そう!という事で、頼もうとしました。 すると・・・ 「えっ・・・??アメリカでしか売ってへんの・・・??マジで・・・?」 そう、現在小売から買えるのはアメリカのみっぽく、他の国は小売店で売ってないとのことでした。 ここで諦めかけましたが、なんと公式サイトからならいけそうだったので公式サイトでポチりました。 そして実際にかかった金額がこちら。 本体24.99ドルに配送料が7.99ドル。 しめて32.98ドル。 うーん、高い! でもこれを頼んでダメでもレビューを書けば俺が人柱になり他の人が損をしなくて済む・・・!という事でひとまず到着まで待つ。 到着、そして これが6/18のこと。 そして今さっきポストを見たら届いてました。 例のブツが。 やっほーい!!! 早速試してみるぞ!! そして純正のLサイズのイヤーピースを外し、Complyのイヤーピースを装着! 恐る恐る付けてみると・・・ 神は存在したのか・・・!!! え??なにこれ?? ヘドバンし

ゼロから始めるLeetCode Day69 「279. Perfect Squares」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day68 「709. To Lower Case」 次回 ゼロから始めるLeetCode Day70 「295. Find Median from Data Stream」 Twitter やってます。 問題 279. Perfect Squares 難易度はMedium。 Top 100 Liked Questionsからの抜粋です。 正の整数nが与えられたとき、足してnになる完全な平方数の最小数(例えば、1, 4, 9, 16, …)を求めよ、という問題です。 Example 1: Input: n = 12 Output: 3 Explanation: 12 = 4 + 4 + 4. Example 2: Input: n = 13 Output: 2 Explanation: 13 = 4 + 9. #解法 class Solution : def numSquares ( self , n : int ) - > int : dp = [ i for i in range ( n + 1 ) ] for i in range ( 2 , n + 1 ) : for j in

ゼロから始めるLeetCode Day68 「709. To Lower Case」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day67 「1486. XOR Operation in an Array」 次回 ゼロから始めるLeetCode Day69 「279. Perfect Squares」 Twitter やってます。 問題 709. To Lower Case 問題としては文字列パラメータ str を持ち、同じ文字列を小文字で返す関数 ToLowerCase() を実装する、という問題です。 Example 1: Input: “Hello” Output: “hello” Example 2: Input: “here” Output: “here” Example 3: Input: “LOVELY” Output: “lovely” 解法 class Solution : def toLowerCase ( self , str : str ) - > str : return str . lower ( ) # Runtime: 24 ms, faster than 91.12% of Python3 online submissions for To Lower Case. # Memory Usage: 14 MB, less th

ゼロから始めるLeetCode Day67 「1486. XOR Operation in an Array」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 [ゼロから始めるLeetCode Day66「438. Find All Anagrams in a String」](( https://kueharx.blogspot.com/2020/06/leetcode-day66438-find-all-anagrams-in.html ) 次回 ゼロから始めるLeetCode Day68 「709. To Lower Case」 Twitter やってます。 問題 1486. XOR Operation in an Array 問題としては、整数 n と整数 start が与えられます。 nums[i] = start + 2*i (0-indexed) で n == nums.length の配列 nums を定義します。 nums の全要素のビット単位の XOR を返します。 Example 1: Input: n = 5, start = 0 Output: 8 Explanation: Array nums is equal to [0, 2, 4, 6, 8] where (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8. Where “^” corresponds to bitwise XOR operator. Example 2: Input: n =

ゼロから始めるLeetCode Day66「438. Find All Anagrams in a String」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day65「560. Subarray Sum Equals K」 次回 [ゼロから始めるLeetCode Day67 「1486. XOR Operation in an Array」](( https://kueharx.blogspot.com/2020/06/leetcode-day67-1486-xor-operation-in.html ) Twitter やってます。 問題 438. Find All Anagrams in a String 難易度はMedium。 Top 100 Liked Questionsからの抜粋です。 文字列 s と空でない文字列 p が与えられたとき、 s の中の p のアナグラムの開始インデックスをすべて求めなさい、という問題です。 Stringsは英小文字のみで構成され、 s と p の長さはともに20,100を超えてはいけません。 なお、出力の順番は関係ありません。 Example 1: Input: s: “cbaebabacd” p: “abc” Output: [0, 6] Explanation: The substring with start index = 0 is “cba”, which is an anagram of “a

久しぶりにJavaでLeetCodeを解いた話

速い速い速い こんな印象。 昔Pythonで解いたEasyの問題とかを遊びがてらJavaで解いてみました。 普段PythonでLeetCodeを解いている身からすると異常なほど速い。 いや、もちろん速さ自体はそりゃPythonはスクリプト言語だし、軽量だし、どっちかというと書きやすさや手軽に記述できる点が良いっていうのは分かってはいましたが、大体こんな感じだろうな〜ってJavaで適当に書いてもPythonが話にならないくらい。 そりゃそうだろお前何いってんだ。ってなる人がほとんどだとは思いますけど、いざ目の当たりにすると衝撃的だったので。 しかし書きやすさは圧倒的にPythonだし、これからもおそらくLeetCodeを解く時はPython、なんだろうけど・・・ うーん、通った時のコードが速いとすんごい脳汁がドバドバ出るんですよね。 昔Matzさんの講演会にいった時におっしゃってた「俺ってばすげー感」が味わえる感じがすごく心地いいというか。 あー、俺今この瞬間は間違いなく天才だわ。って感覚がたまらない。 でも解いてるのEasyだけどね。大体の人が解ける問題だけどね。 でも人と比べるよりも楽しく自分が気持ち良くなれるような楽しさがあった方が絶対いいし、爽快感もある。しかも一人で楽しんでいるので誰にも迷惑をかけなくて済む! こんなに楽しくて役に立つ趣味があるだろうか、いや、ない(反語) これはハマるかもしれない・・・ あ、一応 リポジトリ を作って管理しているので気になる方はどうぞ。 僕が飽きなければ徐々に増えていくと思います。 なおC++はやりません。

ゼロから始めるLeetCode Day65「560. Subarray Sum Equals K

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day64「287. Find the Duplicate Number」 次回 ゼロから始めるLeetCode Day66「438. Find All Anagrams in a String」 Twitter やってます。 問題 560. Subarray Sum Equals K 難易度はMedium。 Top 100 Liked Questionsからの抜粋です。 整数の配列と整数 k が与えられたとき,和が k に等しい連続部分配列の総数を求めよ、という問題です。 Example 1: Input:nums = [1,1,1], k = 2 Output: 2 Constraints: The length of the array is in range [1, 20,000]. The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7]. 解法 import collections class Solution : def subarraySum ( self , nums : List [ int ] , k : int )

ゼロから始めるLeetCode Day64「287. Find the Duplicate Number」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day63 「195. Tenth Line」 次回 まだ Twitter やってます。 問題 287. Find the Duplicate Number 難易度はMedium。 Top 100 Liked Questionsからの抜粋です。 問題としては、各整数が1からnまでの間にあるn + 1の整数を含む配列 nums が与えられたとき,少なくとも1つの重複した数が存在しなければならないことを証明してください。 重複する数が1つしかないと仮定して,重複する数を求めるアルゴリズムを設計してください。 Example 1: Input: [1,3,4,2,2] Output: 2 Example 2: Input: [3,1,3,4,2] Output: 3 Note: 配列を変更してはいけません(配列は読み取り専用と仮定してください)。 定数,O(1) の余分な空間のみを使用しなければなりません。 実行時の複雑さは,O(n2)以下でなければなりません。 配列の中に重複する数は1つだけですが,それが複数回繰り返される可能性があります。 解法 読み取り専用であり、ソートできないという制約があるのを見落とさずに確認しておきましょう。 class Solution : def

ゼロから始めるLeetCode Day63 「195. Tenth Line」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day62「83. Remove Duplicates from Sorted List」 次回 まだ Twitter やってます。 問題 195. Tenth Line 嗜好を少し変えて今回はshellについての問題です。 問題としては、テキストファイルである file.text が与えられます。10行目を出力してください。 Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 Your script should output the tenth line, which is: Line 10 解法 awkコマンドを使って以下のように叩けば問題の条件を満たすことができます。 # Read from the file file.txt and output the tenth line to stdout. awk 'NR == 10' file.txt 実はLeetCodeの問題はアルゴリズムだけではなく、データベースなどについての問題もあります。(数は少ないですが・・・) 今後はアルゴリズムだけではなく、こういった問題もたまには乗せていけると良いかなぁと思います。 では今回はここ

ミニマリストの僕がPowerBeatsProをやめてAirPods Proに切り替えた話

# フルワイヤレスイヤホン遍歴 僕のフルワイヤレスイヤホンデビューは Jaybird RUN からだった。 現在は後継モデルの XT や、 VISTA などもリリースされているためかなり値段が落ちているが、当時は2万近くするものであったし、学生であったため決して安いものではなかった。 しかし、当時はジョギングが好きでよく走っていたし、その当時使っていたJaybird X3は走っているときに汗をかくとコードがうざったくなるためフルワイヤレスイヤホンというものに強く憧れがあった。 しかもJaybirdというメーカーはアスリート向けのオーディオ機器を取り扱っているメーカーなので、きっと落ちにくく、そして汗をかいても大丈夫な素晴らしいイヤホンであることを信じて思い切って買った。 確かに良いもので、とても使い込んだ。しかし、いくつか気になる点があった。 動画などを見る際に音声の遅延があること、ケースがちょっとした衝撃で空いてしまうことなどだ。 些細なことに見えるかもしれないが、映画などを見る際にラグがあると予想以上に違和感があるものだ。 当時は英語のリスニングの勉強をしたくてNetflixを契約していたのだが、ラグが気になってしまい、次第に外で見なくなっていった。 そのJaybird Runを使い続けている内に大学を卒業し、就職した。 そして次に目をつけたのが PowerBeatsPro だった。 初めてアナウンスされた時に黒いフォルム、スポーツするときでもそうそう落ちないような耳掛け方式、動画を見る時にも遅延はない、何より僕が使っているiPhoneと相性が良いことは予想がついた。 しかし、日本での発売が遅く、居てもたっても居られなくなった僕はeBayを使って個人で輸入するまでして手に入れた。 宅配便で届き、外箱を見たときは僕はこれからこのイヤホンを使い続けるんだ!と思っていた。 しかし、このイヤホンにも欠点があった。 そう、ケースがデカすぎるのだ。 よくよくプレスリリースなどを見てみればわかるのだが、明らかに他のフルワイヤレスイヤホンに比べてケースが大きい。 成人男性のジーンズの前ポケットに入れても主張しまくるほどのデカさ。 設計を担当した人は何を考えているんだろう。と本気で思った。 それくらい大きいのだ。 これの対策として家に帰る日ならケースを持って出歩かずに、外してその

ゼロから始めるLeetCode Day62「83. Remove Duplicates from Sorted List」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day61「7. Reverse Integer」 次回 まだ 今はTop 100 Liked QuestionsのMediumを優先的に解いています。 Easyは全て解いたので気になる方は目次の方へどうぞ。 Twitter やってます。 問題 83. Remove Duplicates from Sorted List 解いた問題と記事を書いた問題の管理が上手くできていなくて、てっきり書いたものだと思っていました。 ゼロから始めるLeetCode Day48 「26. Remove Duplicates from Sorted Array」 こっちの方しか書いてませんでした。 名前が紛らわしくて思わず笑っちゃいました。 さて、今回の問題ですが、連結リストが与えられるので、全ての要素が一度しか登場しないようにDuplicates(複製)を取り除いてください、という問題です。 Example 1: Input: 1->1->2 Output: 1->2 Example 2: Input: 1->1->2->3->3 Output: 1->2->3 解法 僕は以下のように書きました。 他言語特有のん?となるような要素も少ないですし、他

ゼロから始めるLeetCode Day61「7. Reverse Integer」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 Twitter やってます。 #問題 7. Reverse Integer 難易度はEasy。 32ビット符号付き整数 x が与えられたとき、整数の逆数を計算するアルゴリズムを設計してください、という問題です。 Input: 123 Output: 321 Input: -123 Output: -321 Input: 120 Output: 21 解法 Pythonの場合はスライスと abs を使えば要素の指定と絶対値の管理ができるので比較的解きやすいのではないかと思います。 他の言語については知りませんが、スタックを使って解くのが一般的なのかもしれませんね。 今回は32bit整数という前提があるため、処理に入る前に別の桁を追加してもオーバーフローしないかを事前に確認しておく方が良いでしょう。 Pythonではint型に最大値がないのでメモリの有る限りいくらでも計算できます。 なので以下のように自分で設定しておく必要があります。 max_32 = 2 ** 31 - 1 最初にこの値より x が大きかった場合は無条件で0を返すときちんと場合分けできていると思います。 そして、この後の分岐ですが、正の値ならば後ろから要素を取ってあげて、負の値ならば絶対値の逆から要素を取ってあげて代入する前に - を付けてあげます。 Pythonでは負の値ならば代入する要素の先

ゼロから始めるLeetCode Day60「1481. Least Number of Unique Integers after K Removals」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 Twitter やってます。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day59 「1221. Split a String in Balanced Strings」 次回 ゼロから始めるLeetCode Day61「7. Reverse Integer Twitter やってます。 問題 1481. Least Number of Unique Integers after K Removals 難易度はMedium。 最近追加されたかなり新しめの問題ですね。 問題としては、配列の arr と整数の k が与えられます。 k 個分の要素を配列から削除した後、ユニークな整数の数の最小値を求めるアルゴリズムを設計してください、という問題です。 少し分かりづらいので例を見てみましょう。 Input: arr = [5,5,4], k = 1 Output: 1 Explanation: Remove the single 4, only 5 is left. この例だと1個の要素は配列内に 4 しかありません。なので4を削除します。 残った要素は 5 のみになるためそのまま 5 を返します。 Input: arr = [4,3,1,1,3,3,2], k = 3 Output: 2 Explanation: Remove 4, 2 and e

ゼロから始めるLeetCode Day59 「1221. Split a String in Balanced Strings」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 Twitter やってます。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day58 「20. Valid Parentheses」 次回 ゼロから始めるLeetCode Day60「1481. Least Number of Unique Integers after K Removals」 Twitter やってます。 問題 1221. Split a String in Balanced Strings 難易度はEasy。 問題としては、文字列 s が与えられます、この文字列の中には 'L' か 'R' しか入っていません。 これらの文字数が等しい文字列を最大量のバランスが取れた文字列で分割し、その分割の最大量を返してください。 自分で翻訳しててもわかりづらいのでとりあえず例を見てみましょう。 Input: s = “RLRRLLRLRL” Output: 4 Explanation: s can be split into “RL”, “RRLL”, “RL”, “RL”, each substring contains same number of ‘L’ and ‘R’. Input: s = “RLLLLRRRLR” Output: 3 Explanation: s can be split int

ゼロから始めるLeetCode Day58 「20. Valid Parentheses」

概要 海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。 どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。 早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。 と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。 ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。 Leetcode Python3で解いています。 Twitter やってます。 ゼロから始めるLeetCode 目次 前回 ゼロから始めるLeetCode Day57 「35. Search Insert Position」 次回 ゼロから始めるLeetCode Day59 「1221. Split a String in Balanced Strings」 Twitter やってます。 問題 20. Valid Parentheses 難易度はEasy。 問題としては文字 ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ および ‘]’ だけを含む文字列 s が与えられた場合、入力された文字列が有効かどうかを判断します。 入力文字列は、以下のような場合に有効です。 開いているカッコは、同じ種類のカッコで閉じなければなりません。 カッコは正しい順序で閉じなければなりません。 空の文字列も有効とみなされることに注意してください。 Input: “()” Output: true Input: “()[]{}” Output: true Input: “(]” Output: false Input: “([)]” Output: false Input: “{[]}” Output: true 解法 例を見ればわかりますが、括弧の中で別に括弧が完結すれば True になり得ますが、そうでない場合ならば