Arrays 如何检查单个二维数组中是否存在两个相同的数组?[快速]
如果我有一个这样的二维数组:[[1,2,3],[3,2,1],[4,9,3],我想知道在这个数组中有两个相同的数组,它们是[1,2,3]和[3,2,1]。我怎样才能做到这一点 谢谢你的回答,我一直在关注leetCode三和问题,所以我没有留下任何评论。但是由于我是编程高手,我的答案超过了时间限制。。所以我实际上想找到重复的数组,删除所有重复的数组,在多维数组中只留下一个唯一的数组。我已经根据@Oleg的答案添加了一些额外的代码,我想我应该把我的函数放在这里:Arrays 如何检查单个二维数组中是否存在两个相同的数组?[快速],arrays,swift,algorithm,multidimensional-array,Arrays,Swift,Algorithm,Multidimensional Array,如果我有一个这样的二维数组:[[1,2,3],[3,2,1],[4,9,3],我想知道在这个数组中有两个相同的数组,它们是[1,2,3]和[3,2,1]。我怎样才能做到这一点 谢谢你的回答,我一直在关注leetCode三和问题,所以我没有留下任何评论。但是由于我是编程高手,我的答案超过了时间限制。。所以我实际上想找到重复的数组,删除所有重复的数组,在多维数组中只留下一个唯一的数组。我已经根据@Oleg的答案添加了一些额外的代码,我想我应该把我的函数放在这里: func removeDuplica
func removeDuplicates(_ nums: inout [[Int]] ) -> [[Int]]{
let sorted = nums.map{$0.sorted()}
var indexs = [Int]()
for (pos,item) in sorted.enumerated() {
for i in pos+1..<sorted.count {
if item == sorted[i] {
if nums.indices.contains(i){
indexs.append(i)
}
}
}
}
indexs = Array(Set<Int>(indexs))
indexs = indexs.sorted(by: {$0 > $1})
for index in indexs{
nums.remove(at: index)
}
return nums
}
func删除的副本(nums:inout[[Int]])->[[Int]]{
设sorted=nums.map{$0.sorted()}
变量索引=[Int]()
对于排序的.枚举()中的(位置,项目){
对于pos+1中的i..$1})
用于索引中的索引{
nums.remove(在:索引处)
}
返回nums
}
我想到的一种简单易行的暴力方法是:
通过这种方式,您将知道二维阵列中的阵列对是如何相同的 我的解决方案非常简单易懂
let input = [[1,2,3], [3,2,1], [4,9,3]]
首先让我们对嵌套数组的所有元素进行排序。(这给了我们更高的效率。)
然后我们应该比较每个元素
for (pos,item) in sorted.enumerated() {
for i in pos+1..<sorted.count {
if item == sorted[i] {
print(input[pos])
print(input[i])
}
}
}
有一个非常有效的算法使用排列哈希方法 1) 对二维阵列进行预处理,使所有元素均为非负数。(通过从所有元素中减去最小的元素) 2) 对于每个子阵列A: 计算hash[A]=sum(基^A[i]|和子数组A的所有索引i)。选择base作为非常大的素数(例如1e9+7)。计算时可以忽略整数溢出问题,因为这里只使用加法和乘法 3) 现在您有了每个子数组的数组“hash”。如果数组有两个相同的子数组,则它们必须具有相同的哈希代码。查找具有相同哈希代码的所有子数组对(再次使用哈希,或排序,…无论什么) 4) 对于每一对,再次检查这些子数组是否匹配(排序和比较,…无论什么)。如果可以找到实际匹配的2个子数组,则返回true,否则返回false 实际上,这种方法运行非常快,尽管理论上非常慢。这是因为散列步骤会删减大部分搜索空间,而且这个散列函数非常强大。我确信99.99%,如果存在,具有相同哈希代码的对应子数组对将实际匹配。我确信您尝试了一些方法。不要害羞——展示你的尝试!(这样看起来就不像是“给我代码”的问题。)
for (pos,item) in sorted.enumerated() {
for i in pos+1..<sorted.count {
if item == sorted[i] {
print(input[pos])
print(input[i])
}
}
}
[1, 2, 3]
[3, 2, 1]