ホームページ >Java >&#&チュートリアル >Leetcode — Digitville の 2 つの卑劣な数字

Leetcode — Digitville の 2 つの卑劣な数字

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 04:56:431009ブラウズ

Leetcode — The Two Sneaky Numbers of Digitville

次のような簡単な問題です:

デジットビルの町には、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。