二分查找
双指针查找
无重复数字
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))