首页 / JAVA / java – 按值和索引搜索数组
java – 按值和索引搜索数组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 按值和索引搜索数组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1762字,纯文字阅读大概需要3分钟。
内容图文
![java – 按值和索引搜索数组](/upload/InfoBanner/zyjiaocheng/797/79dd315efaa744b79760a40f83eec428.jpg)
我有一个排序的整数数组,我想在其上执行搜索.该数组可以具有重复值.如果我搜索重复的元素,那么它应该返回元素的第一个实例的索引.
如果我使用Arrays.binarySearch(),那么它不一定会给出搜索到的元素的第一个实例的索引.例子可见here:
int[] A = {10,20,21,24,24,24,24,24,30,40,45} ;
int idx = Arrays.binarySearch(A,24) ;
哪里,idx将是5.我希望它是3.我之前通过创建一个类对来解决了这个问题:
class Pair implements Comparable<Pair>
{
int value, index ;
Pair(int v,int i)
{
this.value = v ;
this.index = i ;
}
@Override
public int compareTo(Pair p)
{
if(p.value<this.value)
return 1 ;
else if(p.value>this.value)
return -1 ;
else
{
if(p.index<this.index)
return 1 ;
else if(p.index>this.index)
return -1 ;
else return 0 ;
}
}
}
当使用Collections.binarySearch(new Pair(24,Integer.MIN_VALUE))搜索时(对于列表的对)将返回3.
那么代码将是:
int[] A = {10,20,21,24,24,24,24,24,30,40,45} ;
List<Pair> L = new ArrayList<Pair>() ;
for(int i=0;i<A.length;i++)
{
L.add(new Pair(A[i],i)) ;
}
int idx = Collections.binarySearch(L,new Pair(24,Integer.MIN_VALUE)) ;
if(idx<0) idx = -idx-1 ;
System.out.println(idx) ;
对的工作原理如下:
它有两个变量value和index,它们是排序数组元素的值,以及数组中元素的索引.覆盖compareTo方法以允许Collections.binarySearch()执行比较.比较可以这样定义:
>如果当前值大于或小于,则顺序由值决定.
>如果值相同,则使用索引确定顺序.
我的问题是,这可以用一种不那么混乱的方式来完成吗?任何更短的东西,将不胜感激!
解决方法:
看看下面的代码.对原始二进制搜索代码进行了更改:l和r分别是左右范围
public static int binarySearch(int[] arr, int num, int l,int r) {
int mid = (l+r)/2;
if(arr[mid] == num && (mid>0&& arr[mid-1]!=num) || mid==0) {
return mid;
}
else if(arr[mid] > num || (mid > l && arr[mid] == num && arr[mid-1] == num)) {
return binarySearch(arr, num, l, mid);
}else {
return binarySearch(arr, num, mid, r);
}
}
内容总结
以上是互联网集市为您收集整理的java – 按值和索引搜索数组全部内容,希望文章能够帮你解决java – 按值和索引搜索数组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。