这次做的老慢了,10.30赶到办公室开LeetCode,稍微晚了几分钟,做着做着老板还推门进来了,上点小分。

image.png

T1:100264. 最长的严格递增或递减子数组

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. 满足距离约束且字典序最小的字符串

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 的最少操作数

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