Java 在以下约束条件下,如何定位索引?
给定一个由n个整数组成的数组A[0…n−1] ,以致∀i、 0≤我≤n、 我们有| A[i]−A[i+1]|≤1,如果A[0]=x,则A[n−1] =y,我们有x这个: |A[i]−A[i+1]|≤ 一, 表示数组中的每个元素最多有一个不同的(-ve或+ve)。然后,可以包含当前的z的最近索引是Java 在以下约束条件下,如何定位索引?,java,algorithm,sorting,recursion,pseudocode,Java,Algorithm,Sorting,Recursion,Pseudocode,给定一个由n个整数组成的数组A[0…n−1] ,以致∀i、 0≤我≤n、 我们有| A[i]−A[i+1]|≤1,如果A[0]=x,则A[n−1] =y,我们有x这个: |A[i]−A[i+1]|≤ 一, 表示数组中的每个元素最多有一个不同的(-ve或+ve)。然后,可以包含当前的z的最近索引是| A[cur]-z空格 因此,您要做的是从j=0开始,并为每个步骤计算出它。跳转那么多空格,然后再次检查。最终你会找到z或者到达终点 public static int findZ(int[] a, i
| A[cur]-z
空格
因此,您要做的是从j=0
开始,并为每个步骤计算出它。跳转那么多空格,然后再次检查。最终你会找到z或者到达终点
public static int findZ(int[] a, int z){
int j = 0;
while(j < a.length){
if(a[j] == z)
return j
j += Math.abs(a[j] - z);
}
return -1;
}
结果仍然是O(n)总体上更糟的情况,但是
现在你最坏的情况更像是
{0,0,0,1,0,0,0}
,而你最好的情况是{0,1,2,3,2,1,0}
,你到底在找什么?@Scolytus:他在找j
。是吗?;)你总是可以迭代整个数组,但我想那不是他想要的。。。所以我很高兴能得到更多的信息……这是老师给我们的唯一信息:(你告诉我数组是有序的-不是。不,这不是假设。即使不是,每个元素也只能与前面的元素有[-1,0,1]
不同,所以它是否有序并不重要。还有很好的例子-拇指朝上;)不错,但我需要使用二进制、指数或插值搜索。我真的不知道如何使用它们。+1表示j+=Math.abs(a[j]-z)代码>
public static int findZ(int[] a, int z){
int j = 0;
int k = a.length - 1;
while(j <= k){
if(a[j] == z)
return j
if(a[k] == z)
return k;
j += Math.abs(a[j] - z);
k -= Math.abs(a[k] - z);
}
return -1;
}