Computer >> Máy Tính >  >> Lập trình >> C#

Làm cách nào để xóa các bản sao khỏi mảng đã sắp xếp và trả về mảng không trùng lặp bằng C #?

Mảng đã được sắp xếp, chúng ta có thể giữ hai con trỏ ii và jj, trong đó ii là con chạy chậm trong khi jj là con chạy nhanh. Miễn là nums [i] =nums [j] nums [i] =nums [j], chúng tôi tăng jj để bỏ qua trùng lặp.

Khi chúng ta gặp nums [j]! =Nums [i] quá trình chạy trùng lặp đã kết thúc vì vậy chúng ta phải sao chép giá trị của nó vào nums [i + 1] nums [i + 1]. ii sau đó được tăng dần và chúng tôi lặp lại quy trình tương tự một lần nữa cho đến khi jj đến cuối mảng. Tạo một mảng mới, sao chép tất cả các phần tử từ mảng đã lọc cho đến chỉ mục và trả về mảng mới.

Độ phức tạp về thời gian - O (N)

Ví dụ

using System;
namespace ConsoleApplication{
   public class Arrays{
      public int[] RemoveDuplicatesFromSortedArrayAndReturnArray(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;
            }
         }
         int[] newarr = new int[index];
         for (int i = 0; i < index; i++){
            newarr[i] = arr[i];
         }
         return newarr;
      }
   }
   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.RemoveDuplicatesFromSortedArrayAndReturnArray(arr);
         for (int i = 0; i < res.Length; i++){
            Console.WriteLine(res[i]);
         }
         Console.ReadLine();
      }
   }
}

Đầu ra

0 1 2 3 4