力扣第242场周赛,前两题。
为啥是前两题?
因为菜hhhh~
5763. 哪种连续子字符串更长
简单地数 数
代码丑,简单题能快点过就好了。虽然卡了一会儿
class Solution:
def checkZeroOnes(self, s: str) -> bool:
atotal, btotal = [], []
a, b = 0, 0
last = s[0]
length = len(s)
flag = s[0]
for i in s:
if i == '1':
if flag == i:
a += 1
else:
flag = i
a += 1
btotal.append(b)
b = 0
elif i == '0':
if flag == i:
b += 1
else:
flag = i
b += 1
atotal.append(a)
a = 0
btotal.append(b)
atotal.append(a) # 怕最后漏了一个
return max(atotal) > max(btotal)
5764. 准时到达的列车最小时速
这题车速度是连续有序的值,可以进行二分查找
需要在等待车的位置进行取整处理,其他细节代码有注释
class Solution:
def minSpeedOnTime(self, dist, hour):
if len(dist)-1 >= hour: # 最快一班车也要1小时,如果需要等待的车都比给的时间多,肯定不能,返回-1
return -1
low = 1 # 下限应该就是1啦,不然怎么走
# 这里速度上限的思路是:( 距离最大化 / 时间最小化(假设花了很多时间等待))
high = len(dist)*max(dist)//(hour-len(dist)+1)
# 接下来就是熟悉的二分查找了
while low < high:
mid = (low+high) // 2
if self.check(hour, mid, dist): # 这个条件是时间不够返回true
low = mid + 1
else:
high = mid
# 加上一个判断bool的返回
return int(low)
def check(self, hour, mid, dist):
total = 0
lenth = len(dist)
for i in range(lenth):
if i == lenth-1:
total += dist[i]/mid # 最后面的车坐完就结束了
else:
total += ceil(dist[i]/mid) # 前面几班车都需要向上取整,因为都需要等待
return total > hour # 返回时间不够(true)
1707. 与数组中元素的最大异或值 【该题非正确解答,等有时间再更新】
确认过眼神,我做不出来的题目,字典树。还得仔细了解了解才行。
不过还是得先来写一下自己幼稚的思路(超时做法)。
class Solution:
def maximizeXor(self, nums: List[int], queries: List[List[int]]) -> List[int]:
nums = set(nums) # 能够去重自动排序
nums = list(nums) # 分开写是因为,一旦没有重复的元素,list(set(nums))是不会进行排序的
min_num = nums[0] # 记录最小值
length = len(queries) # 准备遍历
ans = []
for i in range(length):
ans.append(self.check(i, nums, queries, min_num)) # 这里是将最大的异或值返回
return ans
def check(self, i, nums, queries, min_num):
a = 0
if min_num > queries[i][1]: # 依据要求,返回-1
return -1
place = bisect.bisect(nums, queries[i][1]) # 这是python二分查找函数,找到比这个右边参数小的索引的右侧。
for j in range(place): # 再次遍历
a = max(a, nums[j]^queries[i][0]) # 去大值
return a