假设我有一个大小为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代码!提前多谢
阿里
可以使用
defaultdict
和enumerate
在线性时间内执行此操作:但是请注意,您的示例有
int
个值,而不是float
float
作为字典键的性能较差,因为它们可能会受到舍入或精度错误的影响,特别是当它们是某种计算的结果时@schwobaseggl用dict给出的答案可能是最好的,但为了完整起见,这里有一个使用groupby的解决方案
此解决方案按值的递增顺序返回组
相关文件:
相关问题 更多 >
编程相关推荐