English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

既に並べ替えられた配列から重複要素を除くJava

問題説明

既にソートされた配列が与えられた場合、配列内の重複要素を取り除き、一つの重複要素のみを残し、新しい配列の長さを返します。

要求:
配列に追加の空間を割り当てず、定数のメモリサイズを使用してインプレース操作を行わなければなりません。

例えば:
配列A=[1,1,2]に変わります。あなたの関数が呼び出された後は、長さlength=を返さなければなりません。2、そしてAが[1,2]。

入力

既にソートされた配列、例えば[1,1,2]。

出力

新しい配列の長さを返します、例えばlength=2。

クイック・スロウ・ポインタ法

fastポインタを使用して配列を巡回し、slowポインタは重複しない要素の次の要素を指します。

public static int removeDuplicates(int[] nums)
{
  if (nums.length < 1)
    return nums.length;
  int slow = 1;
  for (int fast = 1; fast < nums.length; fast++) {
    if (nums[fast] != nums[slow - 1]) {
      nums[slow++] = nums[fast];
    }
  }
  return slow;
}

アニメーション表示:

拡張

既に並べ替えられた配列から重複を削除し、指定された桁数を保持します。

public static int removeDuplicatesN(int[] nums, int repeatN)
{
 if (nums.length <= repeatN)
  return nums.length;
 int index = repeatN;
 for (int i = repeatN; i < nums.length; i++) {
  if (nums[i] != nums[index - repeatN]) {
   nums[index++] = nums[i];
  }
 }
 return index;
}

これで本文のすべての内容が終わりました。皆様の学習に役立てば幸いです。また、呐喊教程を多くのサポートをお願いします。

声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、アップロードされた内容です。本サイトは所有権を有しておらず、人工的な編集は行われていません。著作権侵害が疑われる内容を見つけた場合は、メールで notice#w までお知らせください。3codebox.com(メールを送信する際には、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりついた場合、本サイトは侵害が疑われる内容をすぐに削除します。)

おすすめ