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ề độ dài 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 quá trình tương tự một lần nữa cho đến khi jj đến cuối mảng.

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

Ví dụ

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();
      }
   }
}

Đầu ra

5