Python 编程题 第九节:二分查找、移动0、旋转字符串、判断子序列

二分查找

双指针查找

无重复数字

lst=[1,15,24,36,78,92,101]
n=int(input())
def binary_search(n,lst):
    left = 0
    right = len(lst) - 1
    while left<=right:
        mid=(left+right)//2
        if lst[mid]==n:
            return mid
        elif lst[mid]<n:
            left=mid+1
        elif lst[mid]>n:
            right=mid-1
    return -1
print(binary_search(n,lst))

有重复数字

返回第一次出现目标数字的位置

lst=[1,15,15,24,24,36,78,92,101]
n=int(input())
def binary_search(n,lst):
    left = 0
    right = len(lst) - 1
    while left<=right:
        mid=(left+right)//2
        if lst[mid]==n:
            temp=mid
            while lst[temp]==n and temp>=0:
                temp-=1
            return temp+1
        elif lst[mid]<n:
            left=mid+1
        elif lst[mid]>n:
            right=mid-1
    return -1
print(binary_search(n,lst))

移动0

将0移动到末尾

lst=[1,0,0,24,24,0,78,92,101]
for i in lst:
    if i==0:
        lst.remove(i)
        lst.append(0)
print(lst)

旋转字符串

若将a字符串从某位置分隔开并将左边字符串移动到右边字符串后组成新的字符串组成b时返回true

想法非常巧妙,将两个a字符串组在一起,若b是其子串则说明可以分割出来

a="hello"
b="lohel"
def func(a,b):
    A = a + a
    if b in A:
        return True
    else:
        return False
print(func(a,b))

判断子序列

如果按照顺序s中的字符可以在t中按照顺序找到,则为子序列

t="hello"
s="elo"
def search(t,s):
    a=0
    b=0
    res=""
    while b<=(len(s)-1) and a<=(len(t)-1):
        if s[b]==t[a]:
            res+=t[a]
            b+=1
        a+=1
    if res==s:
        return True
    else:
        return False
print(search(t,s))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值