查找发送邀请为什么收不到(查找发送邀请怎么接受)
问题描述
在排好序的数组中查找某个数,如果找到返回所在的位置,不存在返回-1
解题思路
对于有序的数组,我们不需要从头到尾,因为从头到尾的平均时间复杂度是O(N/2)。
可以将数组从中间一分为2,如果走运,中间的数值正好等于要找的数,那就结束。如果发现中间这个数大于我们要找的数,那右半边的数,我们就没必要去比较了,可以扔掉不管。我们再将左边的数从中间拆开,和要找的数比较,这样每做一次比较,就扔掉一半的数据,显然这种方法大大地减少了比较次数,运气最差时,经过log2N数字的位置可以通过次比来确定。
使用递归代码public class HalfSearch public static void main(String[] args){ int[] arr = int n=30; HalfSearch halfSearch = new HalfSearch();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;int position = halfSearch.getPosition(arr,n,0,arr.length-1); System.out.println(position); } public int getPosition(int[] arr,int n,int start,int end){ if(end<start){ return -1; } int position =(start end)/2; if(arr[position]==n){ return position; } else if(n>arr[position]){ return getPosition(arr,n,position 1,end); else return getPosition(arr,n,start,position-1);
总结
算法有时就像数学公式,多写多练,遇到问题就可以应用。
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现 本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 fsjilidatousu@homevips.uu.me举报,一经查实,本站将立刻删除。
如若转载,请注明出处: https://www.fsjilida.com/1853.html