FindIndex

FindIndex我们自己来编写寻找某个数字的方法。 首先是findNum方法,我们在一个数组中寻找某一个数字,如果存在的话,返回寻找到的第一个该数字的索引,如果没有找到的话,返回-1. 首先,我们肯定要传一个数组和要寻找的数据进去,先声明一个变量res=-1,如果没有找到的话,直接将其返回。其次,我们需要遍历这个数

我们自己来编写寻找某个数字的方法。

首先是findNum方法,我们在一个数组中寻找某一个数字,如果存在的话,返回寻找到的第一个该数字的索引,如果没有找到的话,返回-1.

首先,我们肯定要传一个数组和要寻找的数据进去,先声明一个变量res=-1,如果没有找到的话,直接将其返回。其次,我们需要遍历这个数字,在for循环里面,搜寻看是否有数字与之相等,有的话,把该数字的索引赋给res,然后返回res并结束循环。注意这里一定要结束循环!否则最后仍会返回-1!因为-1是要先把整个数组跑遍了都没有找到数据,循环自动结束时才返回的。代码实现如下:

 1 package com.hw.ArrayListDemo0131;  2 public class FindIndex {  3     public static void main(String[] args) {  4         int[] data = new int[]{1,2,3,4,8,9,11,16,19,20,28,35,35};  5         int index = findNum(data,1);  6  System.out.println(index);  7  }  8     
 9     public static int findNum(int[] array,int data){ 10         int res = -1; 11         for(int i = 0;i < array.length;i++) 12  { 13             if(array[i] == data) 14  { 15                 res = i; 16                 break; 17  } 18  } 19         return res; 20  } 21 }

 

FindIndex


 

接下来,思考一下,是否存在一种更为高效的方法?如果我随便说一个值,让这个值与目标值比较,看是大了还是小了,然后再缩小范围重复这个操作,这样会不会更快?因此,这里写一下二分查找的代码:

 1 package com.hw.ArrayListDemo0131;  2 public class FindIndex {  3     public static void main(String[] args) {  4         int[] data = new int[]{1,2,3,4,8,9,11,16,19,20,28,35,35};  5         int des = binarySearch(data, 9);  6  System.out.println(des);  7  }  8     
 9     public static int binarySearch(int[] array,int target){ 10         int begin = 0; 11         int end = array.length - 1; 12         while(begin <= end) //如果begin>end就说明没有找到,跳出循环
13  { 14             int indexOfMid = begin + ((end-begin)/2); 15             int mid = array[indexOfMid]; 16             if(target > mid){  //往右推
17                 begin = indexOfMid + 1; 18             }else if(target < mid){  //往左推
19                 end = indexOfMid - 1; 20             }else{ 21                 return indexOfMid; 22  } 23  } 24         return -1; 25  } 26 }

这里,首先这个数组必须是排好序了的。然后,把首元素和最后一个元素拿出来,再取得这个数组中间的元素,并拿这个元素与目标元素进行比较。如果,目标元素大于中间值,那说明目标元素肯定在中间值到尾元素这个区间内,那么首元素和中间值这段区间就不需要考虑了。这个时候,我们需要把区间收缩到中间值的下一个到尾元素的这段区间,那么操作就是begin=indexOfMid+1;如果目标元素小于中间值,那就把尾元素赋值为中间值的上一个元素。如果,目标元素正好就等于中间值,那就是找到了,返回其索引即可。整个这个过程我们肯定要放在循环里面来完成,那么这个时候中间值肯定每次循环时都不一样,因此可以像代码中那样去计算。循环条件怎么设置?我们来想一下,一般来说,begin都是不会大于end的,一旦begin超过了end,那就说明便利了整个数组都没有找到,这个时候返回-1就可以了。

FindIndex

 

今天的文章FindIndex分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/56420.html

(0)
编程小号编程小号
上一篇 2023-08-26
下一篇 2023-08-26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注