C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でソート済み配列から重複を削除し、新しい長さを返す方法

アルゴリズムの考え方:ツーポインタ(二つのポインタ)を使う

配列がすでにソートされている場合、ツーポインタ手法が非常に有効です。2つのインデックス ij を用意し、i を「遅いランナー(スローランナー)」、j を「速いランナー(ファストランナー)」として扱います。

nums[i]nums[j] が等しい間は、j を進めることで重複要素をスキップしていきます。

nums[j] != nums[i] となった時点で、重複の連続が終わったことを意味します。このとき、その値を nums[i + 1] にコピーし、i をインクリメントします。あとは j が配列の末尾に到達するまで、同じ処理を繰り返すだけです。

時間計算量: O(N)

C#での実装例

using System;
namespace ConsoleApplication{
    public class Arrays{
        public int RemoveDuplicatesFromSortedArrayAndReturnLength(int[] arr){
            int index = 1;
            for (int i = 0; i < arr.Length - 1; i++){
                if (arr[i] != arr[i + 1]){
                    arr[index] = arr[i + 1];
                    index++;
                }
                else{
                    continue;
                }
            }
            return index;
        }
    }
    class Program{
        static void Main(string[] args){
            Arrays a = new Arrays();
            int[] arr = { 0, 0, 1, 1, 1, 2, 2, 3, 3, 4 };
            int res = a.RemoveDuplicatesFromSortedArrayAndReturnLength(arr);
            Console.WriteLine(res);
            Console.ReadLine();
        }
    }
}

出力結果

5

この例では、入力配列 { 0, 0, 1, 1, 1, 2, 2, 3, 3, 4 } に含まれる一意な要素は 0, 1, 2, 3, 4 の5つであるため、メソッドは 5 を返します。重複を除いた要素は配列の先頭側に順に詰められます。

  1. 【Android】ソート済みリンクリストから重複を削除する方法をわかりやすく解説

    はじめに この記事では、Androidアプリ開発において、ソート済みのリンクリスト(LinkedList)から重複する要素を削除する方法を解説します。Java標準ライブラリのLinkedHashSetを活用すれば、要素の順序を保ったまま重複だけを簡単に除去できます。 実装手順 ステップ1:新規プロジェクトの作成 まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目を入力してプロジェクトを生成してください。 ステップ2:レイアウトファイル(activity_main.xml)の編集 次に、res/layout

  2. バックアップ内の重複ファイルを検出して削除する方法

    パソコンやスマートフォンのストレージ容量が不足すると、使用頻度の低いファイルを別のドライブへ移すことがあります。パソコンでは外付けハードディスクやUSBメモリが使われ、近年ではクラウドストレージを活用したバックアップが最も一般的です。しかし、バックアップ自体もきちんと整理する必要があると感じていませんか?放置しておくと無駄に容量が埋まってしまい、結局すべてのドライブでストレージ不足に陥ってしまいます。バックアップの際、ジャンクファイルや重複ファイルを確認せずに、すべてのファイルをそのまま移動してしまうことも少なくありません。 本記事では、バックアップから重複ファイルを検出し、削除するためのさま