【发布时间】:2022-01-02 14:15:21
【问题描述】:
我正在尝试找到数组的 2 个给定元素之间的最小距离。 例如,在以下数组 {1,2,3,4,5,6,7} 中,元素 3,7 之间的距离为 4。 我编写了一个成功计算该距离的代码,但如果有重复,它就不起作用。 以下是我到目前为止所写的。我错过了什么?我应该添加任何条件吗? 此外,它应该以不大于 O(n) 的复杂度完成。
public static int findMinDiff(int [] a, int x, int y) {
//previous index and min distance
int next = 0,curr = 0, min_dist = Integer.MAX_VALUE;
for(int i=0 ; i<a.length ; i++)
{
if(a[i]==x)
{
curr = i;
}
else if(a[i] == y){
next = i;
}
}
min_dist = Math.abs(curr - next);
if(min_dist==Integer.MAX_VALUE)
return -1;
return min_dist;
}
【问题讨论】:
-
如果给定的数组是确定排序的,你可以尝试二分查找以获得更好的复杂性。对于重复项,您可以检查最右边或最左边。 This might help
-
我应该在代码中添加什么来检查最左/最右?顺便说一句,数组不一定是排序的
-
如果它是像
1, 2, 3, 3, 4, 5, 6, 6这样的排序数组并且你输入3和6,你需要找到最右边的3和最左边的6,因为你知道6大于3所以它必须在正确的位置。要找到最正确的,只需 1 比 1 或进行二进制搜索,直到你没有得到 3。如果数组没有排序,这可能不起作用。 -
如果数组没有排序并且你需要最小距离(你没有说你需要什么样的距离)你可以像我之前所说的那样逐个检查每个
3你找到最近的6距离。在每个3之后保存排序距离并返回它。
标签: java arrays loops time-complexity