首页 > 编程知识 正文

二分查找算法java,二分查找算法举例说明

时间:2023-05-05 16:26:01 阅读:167648 作者:2714

寻找只出现一次的主题描述码的方法1:2分割搜索,效率高,时间复杂度在o(logn )表示法1 )最优化之前,初步的想法,步骤详细易懂)表示法2 )精简后的表示法)程序执行展示

主题说明

给定非空整数的规则数组,除了某个元素只出现一次外,其余的各元素都出现两次。 找到那个只出现过一次的要素。

这是我面试BAT中某广告算法工程师时的面试问题,应该首先考虑时间的复杂性和空间的复杂性,而且是有序的排列,我先考虑二分搜索,时间的复杂性是o(logn )。

代码方法1 :二分搜索,效率高,时间复杂度o(logn )写法1 (优化前,初步思路、步骤详细、简单明了) importpysnooperlist1=[ 1,1,2,2,2,3,] @打印函数的自变量deffun(list1) :iflen ) list1)==0:# )确定是否为空列表的return-1eliflen(list1)==1:#元素为1=list1[1]:#确定该数字是否出现在最左侧的return list1[0] elif list1[-1]中!=list1[-2]:#此数为最右边的return list1[-1] else:#正常时low=0hi=len[list1]-1whilemin!=low3360m=int(lowhi )/2 )中间位置IFM %2==0: if list1[ m ]=list1[ m1 ] : low=m #舍弃一半的元素else: hi=m#=list1[ m1 ] : return list1[ m ] else : if list1[ m ]==list1[ m-1 ] : low=舍弃一半的m #元素而舍弃一半的else: hi=m#元素=list1[ m1 ] : return list1[ m ] return list1[ m ]表示法2 (精简后表示法) importpysnooperlist1=(1,1,2,2,4,5,5 ) ' a'] list1 ['b ',' b']list1.append ) ' a ' ) low=0hi=len ) list1=low:m=int(lowhi )/2 )中间位置if ) m %=list1[ m1 ] : return list1[ m ] return list1[ m ] print (fun (list1) )程序执行展示starting var :list1=[ 1,1,1 ] 2] 6) 11336031336049.977043 call 4d effun (list1) :11336031336049.978044 line5list1=[ ' a ',' a'] list1 ['b ',',' 2,2,4,5,6,6,' b ',' b ' ] 11336031336049.978044 line6list1. append (' a ' ) modified var 3360.list1=[ ' a ' ] ' a'] 11336031336049.978044 line7low=0newvar : low=011336031336049.978044 line 8hi=len (list1(-1 newvar 336049.978044 line 11336031:49.978044 line 10m=int () lowhi )/2 ) #取中间位置newvar :……m=6113360313360:49.978044 line 11 if (m ) m==list1[m-1] ) 33601336031336049.978044 line 14hi=m #舍弃左半部分的元素modifie eer=list1[ m-1 ] and list1[ m ]!=list1[ m1 ] :11336031336049.978044 line 16 return list1[ m ] 11336031336049.978044 return 16 return list1[ m ] returnval ure时间deffun2(list1) :k=min(set(list1),key=list1.count ) print(k ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。