[英]C# - Array2 contains Array1 ignore order
如果要編寫一段在Array2中查找Array1的代碼,而不考慮順序(記住重復項),我應該在哪里看? 例如
Array1: { 2,5,6,6,3 }
Array2: { 1,2,3,4,5,6,6 }
will return true
Array1: { 2,5,6,6,3 }
Array2: { 1,2,3,4,5,6 }
will return false
我有點想解決這個問題,我只需要指出一些方向。
提前致謝。
好吧,由於您只需要提示而不是代碼,因此一種方法是:
將array2
復制到List<int>
。
排序 。
分配一個位陣列稱為used
等於所述列表的大小。 這些將是標志,指示已排序列表中的特定項目是否已用於匹配。
對於每個項目item
在array1
:
4.1 二進制搜索排序列表item
。
4.2。 如果未找到,則返回false - array2
不包含array1
。
4.3。 如果找到,並且有重復項,則二進制搜索算法將隨機返回其中一個重復項的索引。 在列表中與item
匹配的部分中向后掃描,直到找到used[i]
為false的項目。 如果找到一個,則將used[i]
設置為true,然后繼續外部循環。 如果找不到,請從初始二進制搜索索引向前掃描,嘗試查找未使用的匹配項。 類似地,如果找到一個,則將used[index]
設置為true,並繼續遍歷array1
。
4.4如果未找到未使用的匹配項,則返回false- array2
不包含array1
。
找到array1
每個項目的未使用匹配項后,返回true: array1
包含在array2
內部。
該算法的一個優點是,要檢查多個數組是否包含在給定數組中,您不需要每次都對數組進行重新排序,只需要重新分配BitArray
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.