牛客网编程之二分查找

思路和代码如下:仅供学习,牛客网回复也属于本人,不是抄袭!

1  首先题目限定了使用二分查找法

2  可能出现重复,但是想一下,如果出现了重复,如果是出现再后面,肯定不用考虑,因为执行过程中会忽略,但是出现再前面,返回的索引就不对了,因此再找的得到元素的基础上,要再一个查询条件,查找前面是否存在重复,有则返回

3  查不到元素,树立一个标志位 count ,查到致1,未查到就是0,返回时候判断标志位

4 以下是通过的代码 Python 2.7.3

5 对于split划分,形成列表,列表元素是字符类型,因此在索引的时候需要转型,这个在线编程里面的一个小细节,注意一下。

题目描述

对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。

给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。

测试样例:

[1,3,5,7,9],5,3
返回:1

代码:

import sys
class BinarySearch:
    def getPos(self, A, n, val):
        arr = A
        num = n 
        ele = val
        
        org = 0
        end = len(arr)-1
        count = 0
        while org <= end:
            mid = int((org + end)/2)
            if  arr[mid] == ele:
                count = 1
                break
                
            elif  ele > arr[mid]:
                org = mid + 1
                
            elif  ele <arr[mid]:
                end = mid -1
        if count == 1:
            for  i in A[:int((len(A)-1)/2)]:
                if i == val:
                    return A.index(i)
                else:
                    return mid
        else:
            return -1
    
if __name__ == '__main__':
    class_org = BinarySearch()
    data = sys.stdin.readline().strip().split(',')
    A = data[0]
    n =  int(data[1])
    val = int(data[2])
    
    count = class_org.getPos(A,n,val)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值