81. 搜索旋转排序数组 II
这种题 一看题目用意就知道是让大家伙练练二分查找,由于是由非降序数组旋转一次组成,所以只有一个点会出现数组非降序,那么就可以分为两类, 若目标值 在mid - right 那就 left移动 若目标值在left-mid 那就right 移动,若都不在而mid 到right 又是非降序,那么很可惜 目标值肯定不在mid-right 所以right 移动,值得注意的是记得重复数字先过一遍(又违背了二分 害 可惜 当然如果闲的蛋疼也可以二分去过一遍)
class Solution:
def search(self, nums: List[int], target: int) -> bool:
left = 0
right =len(nums)-1
while left <= right :
mid = (left+right)//2
if nums[mid] ==target :
return True
if nums[right] == nums[mid]:
right -=1
continue
if nums[mid]< target and target<=nums[right] :
left =mid+1
elif nums[left]<=target and target<nums[mid]:
right =mid-1
elif nums[mid]<nums[right]:
right = mid -1
else :
left =mid+1
return False
暴力和上述方法时间一样
for num in nums:
if num == target:
return True
return False
1078. Bigram 分词
暴力 扫一遍 记得别越界
class Solution:
def findOcurrences(self, text: str, first: str, second: str) -> List[str]:
res = []
words = text.split()
for i in range(len(words)-2):
if words[i] == first and words[i+1] and words[i+1]==second and words[i+2]:
res.append(words[i+2])
return res