Sum*_*ngh 0 c c# java algorithm data-structures
可能重复:
检查2个数组是否与I相加
我的问题是我有一个给定的数字no=10;假设和一个数组A,我必须找到那些没有谁的差异是给定的没有.例如: - A[5]-A[3]=10;然后打印print(A[5]); Print(A[5])
我有一个算法,O(n^2)及时做到但我们需要更好的东西...
我的直觉可能是在做短暂的数组之后做的事情.....但是如何...因为在做空之后还需要两个循环来检查那个条件......
我有点困惑......
原始答案 - O(n log n)
怎么样:
x进行二进制搜索x + no
总成本:O(n log n)
根据Steve Jessop的评论修改上述内容:
FWIW,您不必对x + no进行二进制搜索.在迭代数组时,可以在第一个迭代点之前保持第二个迭代点.由于对数组进行了排序,因此在每个步骤中x + no大于或等于上一步中x + no的值,因此从上一步开始的第二个迭代点开始的线性搜索只会前进,因此是O (n)整个外部迭代的总和,即使对于n个步骤中的每个步骤都不是O(1).
这仍然需要预先排序,但是O(n log n).
最佳答案IMO(易于实施和O(n))
编辑:或者,当然,构建一个HashSet以更快地进行包含检查(假设创建集合是分摊O(n)并且查找是O(1)):
HashSet<int> values = new HashSet<int>(array);
foreach (int value in array)
{
if (values.Contains(value + no))
{
// Found a match
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |