首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Array中的值是否与其位置相对应

检查Array中的值是否与其位置相对应
EN

Stack Overflow用户
提问于 2016-05-30 12:45:44
回答 5查看 76关注 0票数 3

不久前,我遇到了一个算法问题。

我需要找出存储在数组中的值是否在"place“中。一个例子会更容易理解。

让我们取一个数组A= {-10,-3,3,5,7}。算法将返回3,因为数字3位于A2处。相反,如果我们采用数组B= {5、7、9、10},则该算法将返回0或false或其他任何内容。

数组总是排序的!

我无法找到一个复杂的解决方案。(个体化地看每一个价值都不太好!)也许可以用一种类似于合并排序的方法来解决这个问题,把它们切成两半,并在这两部分上进行验证?

有人能帮我这个忙吗?Java算法将是最好的,但伪代码也会对我有很大帮助!

EN

回答 5

Stack Overflow用户

发布于 2016-05-30 13:00:33

下面是一种算法(基于二进制搜索),用于查找最佳情况复杂度为O(log(n))和最坏情况复杂度为O(N)的所有匹配索引:

1-检查位置m= array.length /2处的元素

2-如果arraym值严格小于m,则可以忽略数组的左侧(从索引0到索引m-1),并递归地应用到右侧。

3-如果是arraym==m,将一个添加到计数器中,并递归地应用于两部分

4-如果是arraym>m,忘记数组的右半部分,递归地应用到左侧。

在这里,使用线程可以加快速度。我想数组中没有重复。

票数 2
EN

Stack Overflow用户

发布于 2016-05-30 12:58:02

如果要在数组中找到位于自己位置的第一个数字,只需迭代数组:

代码语言:javascript
复制
static int find_in_place(int[] a) {
    for (int i=0; i<a.length; i++) {
        if (a[i] == i+1) {
            return a[i];
        }
    }
    return 0;
}

它的复杂度为O(n),平均成本为n/2。

票数 0
EN

Stack Overflow用户

发布于 2016-05-30 13:02:19

如果没有这样的元素,可以通过添加一个特殊条件来跳过迭代。

代码语言:javascript
复制
if(a[0]>1 && a[a.length-1]>a.length){
    //then don't iterate through the array and return false
    return false;
} else {
    //make a loop here
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37526041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档