【发布时间】:2021-11-19 10:20:22
【问题描述】:
假设我有一个大小为 n 的数组,其中包含一些浮点值。我想创建一个包含子数组的新数组,其中每个子数组将具有原始数组中具有相等值的所有元素的索引。因此,例如,给定一个数组 givenArray=[50,20,50,20,40],答案将是 resultArray=[[0,2],[1,3],[4]]。
蛮力方式是对原始数组进行迭代,在每次迭代中,对结果数组进行迭代,将值与每个子数组中的第一个值进行比较;如果等于它,则在此处添加其索引。如果不等于任何子数组的第一个值,则创建一个新子数组并将其索引放在那里。在 python 中的代码是这样的:
resultArray=[]
for i in range(0,len(givenArray)):
flag=0
for j in range(0,len(resultArray)):
if(givenArray[i]==givenArray[resultArray[j][0]]):
resultArray[j].append(i)
flag=1
if(flag==0):
resultArray.append([i])
此解决方案的复杂度为 O(n^2)。这可以以更好的复杂性完成吗?如何?想法和python代码将不胜感激!提前非常感谢!
阿里
【问题讨论】:
-
尝试排序。您需要跟踪原始索引。
-
我如何跟踪原始索引以及它的复杂性以及整个算法的复杂性(例如,假设排序发生在 O(n logn) 中?
-
@Aly 排序为 O(n log(n));除非您犯了某种Shlemiel the painter 错误,否则其他任何事情都将是O(n)。因此总体复杂度将是 O(n log(n))。
-
有几种方法可以做到这一点。最简单的方法是对一组对 (,value, original_index) 进行排序。
标签: python arrays algorithm data-structures array-algorithms