Java 在以下约束条件下,如何定位索引?

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

给定一个由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, 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;
}