सरणी पहले से ही क्रमबद्ध है, हम दो पॉइंटर्स ii और jj रख सकते हैं, जहां ii धीमा-धावक है जबकि jj तेज-धावक है। जब तक nums[i] =nums[j]nums[i]=nums[j], हम डुप्लिकेट को छोड़ने के लिए jj बढ़ाते हैं।
जब हमारा सामना nums[j] !=nums[i] से होता है, तो डुप्लिकेट रन समाप्त हो जाता है, इसलिए हमें इसके मान को nums[i + 1]nums[i+1] पर कॉपी करना होगा। ii को तब बढ़ाया जाता है और हम उसी प्रक्रिया को फिर से दोहराते हैं जब तक कि jj सरणी के अंत तक नहीं पहुंच जाता। एक नई सरणी बनाएं, फ़िल्टर किए गए सरणी से सभी तत्वों को अनुक्रमणिका तक कॉपी करें और नया सरणी लौटाएं।
समय जटिलता - O(N)
उदाहरण
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(); } } }
आउटपुट
0 1 2 3 4