这次做的老慢了,10.30赶到办公室开LeetCode,稍微晚了几分钟,做着做着老板还推门进来了,上点小分。
T1:100264. 最长的严格递增或递减子数组
思路
暴力解决即可,分别计算出严格递增的最大长度和严格递减的最大长度,返回max即可。
代码
class Solution:
def longestMonotonicSubarray(self, nums: List[int]) -> int:
c1 = 1
c2 = 1
n = len(nums)
for i in range(n):
t = 1
for j in range(i,n-1):
if nums[j] < nums[j+1]:
t += 1
else:
break
c1 = max(c1,t)
for i in range(n):
t = 1
for j in range(i,n-1):
if nums[j] > nums[j+1]:
t += 1
else:
break
c2 = max(c2,t)
return max(c1,c2)
T2:100242. 满足距离约束且字典序最小的字符串
思路
题目要求字典序最小,那就是每次都尽可能把字母变成a。 就好像给每个瓶子加油,加到满之后就会变成空瓶子(z-->a),最后剩下的油加不满了,那就倒掉等量的油量。『不太恰当,但是能用』
这个题目感觉还是不太严谨,测试用例的边界条件应该也不会太恶心。
代码
class Solution:
def getSmallestString(self, s: str, k: int) -> str:
dic1 = {chr(ord('a')+i):i+1 for i in range(26)}
res = ""
for idx,ss in enumerate(s):
d = min(27 - dic1[ss],dic1[ss]-1)
if k >= d:
k-=d
res += "a"
else:
res += chr(ord(ss)-k)
break
res += s[idx+1:]
return res
T3:3107. 使数组中位数等于 K 的最少操作数
思路
1、排序 2、找中位数mid和索引值n//2 3、根据mid和k的大小关系, 若mid=k,return 0 若mid<k,想把mid补齐到k,就得把右边小于k的元素也补齐到k 若mid>k,想把mid补齐到k,就得把左边大于k的元素也砍到k
代码
class Solution:
def minOperationsToMakeMedianK(self, nums: List[int], k: int) -> int:
n = len(nums)
nums.sort()
mid = nums[n//2]
idx = n // 2
c = 0
if k == mid:
return c
elif k > mid:
c += abs(k-mid)
for i in range(idx+1,n):
if nums[i] < k:
c += (k - nums[i])
else:
break
else:
c += abs(k-mid)
for i in range(idx-1,-1,-1):
if nums[i] > k:
c += (nums[i] - k)
else:
break
return c