![]() |
1
1
我认为您可以通过重新使用一个更大的数组来节省一些时间,而不是每次分配新的数组都会导致额外的内存流量和垃圾收集。 这将需要自定义排序实现,该实现知道即使数组可以有1000个项,但对于当前运行,只需要对前80个项进行排序(对于散列也是如此)。在ids的子范围上运行quicksort应该可以正常工作。想法的快速示例(尚未进行详细测试)
|
![]() |
2
3
因此,数组最多可以包含140个项,所有值都在0到175之间。数组中的所有值都是唯一的,顺序无关紧要。也就是说,数组
因此,可以将单个数组表示为175位的集合。更好的方法是,无需对输入数组排序就可以创建集合。 你在c中表示一个集合 BitArray 是的。要计算数组的哈希代码,需要创建集合,然后遍历集合以获取哈希代码。看起来像这样:
它消除了排序以及
我看到你的解决方案的一个问题是你如何使用
该代码错误地假设,如果两个数组的哈希代码相等,则数组相等。您正在为175位数量生成32位哈希代码。肯定会有散列冲突。你最终会说你的两个数组是相同的,而不是相同的。 如果这是你关心的问题,让我知道,我可以编辑我的答案,以提供解决方案。 允许比较
如果希望能够比较项的相等性,而不是只检查它们的哈希代码是否相同,则需要创建一个具有
你的想法是
你的
上面的方法行得通,但这是一个很大的记忆猪。您可以通过创建一个只包含三个
这个班看起来像这样。明白,我还没有测试过代码,但这个想法应该是正确的。
正如我在代码中所评论的,那里的散列函数不太好。它会起作用的,但你可以做得更好一点研究。
这种方法的优点是使用的内存比
|
![]() |
3
1
此版本的
我不知道怎么做
通过消除或减少分支,您还可以获得一些改进
|
![]() |
4
0
把这个放在这里,因为把它放在评论里是没有意义的 到目前为止,我所做的是创建一个布尔数组,并将项的索引设置为true(当存在时),然后用替换calchash;
这样做时,我完全删除了toArray()和array.sort(),这个解决方案是根据dlxeon/jim/joel答案构建的 我把运行时间减少了20-25%,这很好 |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
![]() |
The Great · 拆分并存储数据帧,但名称基于特定列中的唯一值 2 年前 |
![]() |
Klimt865 · Python中的列表列表 2 年前 |
![]() |
Klimt865 · 在Python中将数组列表转换为列表列表 2 年前 |