ホームページ >Java >&#&チュートリアル >Leetcode — Digitville の 2 つの卑劣な数字
次のような簡単な問題です:
デジットビルの町には、0 から n - 1 までの整数を含む nums と呼ばれる数字のリストがありました。各数字はリストに 1 回だけ出現するはずでしたが、2 つのいたずらな数字が追加で忍び込み、通常よりも長いリストです。
町の探偵として、あなたの任務はこれら 2 つの卑劣な数字を見つけることです。 2 つの数値を (任意の順序で) 含むサイズ 2 の配列を返すと、Digitville に平和が戻ります。
例 1:
入力: nums = [0,1,1,0]
出力: [0,1]
説明:
数値 0 と 1 はそれぞれ配列内に 2 回現れます。
例 2:
入力: nums = [0,3,2,1,3,2]
出力: [2,3]
説明:
数値 2 と 3 はそれぞれ配列内に 2 回出現します。
例 3:
入力: nums = [7,1,5,4,3,4,6,0,9,5,8,2]
出力: [4,5]
説明:
数値 4 と 5 はそれぞれ配列内に 2 回出現します。
制約:
2
nums.length == n 2
0
入力は、nums に 2 つの繰り返し要素が含まれるように生成されます。
この問題を解決するには多くの方法があります。マップとしてセット、マップ、配列を使用したり、ビットを使用したりすることもできますが、これは簡単な問題なので、おそらくウサギの穴に深く入り込むべきではありません。
解決策として、配列を並べ替えて、前の数値が等しいかどうかを繰り返しチェックし、等しい場合は結果に追加するという単純なアプローチを採用しました。
class Solution { public int[] getSneakyNumbers(int[] nums) { // build the response and the pivot for the first item of the response array int pivot = 0; int[] response = new int[2]; // sort nums array to make it easy to identify duplication Arrays.sort(nums); // iterate and numbers nearby are the ones considered sneaky, grab them and add into the response for(int i=1;i<nums.length;i++) { if(nums[i-1]==nums[i]){ response[pivot] = nums[i]; pivot++; } } // return response return response; } }
実行時間: 2 ミリ秒、Java オンライン送信の 70.75% よりも高速です。
メモリ使用量: 44.49 MB、Java オンライン送信の 86.86% 未満。
2 つ以下であることが確実な場合は、追加のチェックを行うこともできますが、それ以外にも、このソリューションはほとんどのニーズを満たします。
—
それだけです!他に議論したいことがあれば、お気軽にコメントしてください。何か見逃した場合はお知らせください。適宜更新します。
次の投稿まで! :)
以上がLeetcode — Digitville の 2 つの卑劣な数字の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。