首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二维数组中的二进制搜索与重复的Java

二维数组中的二进制搜索与重复的Java
EN

Stack Overflow用户
提问于 2011-11-23 06:39:03
回答 6查看 6.3K关注 0票数 0

设计一个算法FindElement(a,p),其中"a“是有重复的正整数的二维正方形数组,每一行整数都是非降序的: ai≤ai≤ai···≤ai (ai,.。.,n-1),.算法应该定义p是否包含在a中。如果"p“是成立的,它应该返回true,否则返回false。你的算法必须尽可能的高效。算法应基于二进制搜索

我找到了以下解决方案(但我不确定它是否正确):

解决方案是使用二进制搜索一次搜索一行上工作的元素。对给定大小为(n)的排序行进行二进制搜索需要O(Log(n)),因此在最坏的情况下,搜索整个数组需要O(nlog(n))。

这个解决方案是否适用于给定的任务?我不知道如何实现这个算法,请你给我伪代码或解释如何做。提前谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-23 07:05:09

是的,您的解决方案看起来是正确和有效的(根据您对初始问题的描述,他们可能希望您使用二进制搜索)。你的算法应该是这样的:

代码语言:javascript
运行
复制
public Point FindElement(int[][] matrix, int number) {
    Point p = new Point(); // holds two integers and represents 
                           // a position in the matrix.
    int found = -1;
    for(int i = 0; i < N; i++) {
        found = binarySearch(matrix[i], number, 0, N);
        if(found != -1) { 
           p.setX(i); 
           p.setY(found); 
           return p; 
        }
    }
    return null;
}

其中可以根据此处的伪代码实现二进制搜索:http://en.wikipedia.org/wiki/Binary_search_algorithm#Recursive

票数 1
EN

Stack Overflow用户

发布于 2011-11-23 07:08:08

是的,解决方案是正确的。

下面是伪代码

代码语言:javascript
运行
复制
     int index = -1;
    for (int i : height of array){
      int[] putIn1Darray = a[i][j] where j = 0 to n;
      index = Arrays.binarySearch(putIn1Darray,p); 
      if (index == -1)
          //Element not found yet
          continue;
      else
          //Element found
          break;   
    } 
    print index;

上面的算法用于显示元素p的第一个匹配项。

您可以根据您的硬件进行修改。

票数 1
EN

Stack Overflow用户

发布于 2011-11-23 07:07:28

二进制搜索只适用于排序列表。因此,如果它是合适的:我会说是。只要确保你在得到答案时向前和向后一步,就可以得到所有的副本。

您可以使用以下内容作为基础:http://www.java-tips.org/java-se-tips/java.lang/binary-search-implementation-in-java.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8234915

复制
相关文章

相似问题

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