分类: 日记

  • LeetCode 记录

    刷题总是三分钟热度,不知道能坚持多久

    以此来记录无聊又有趣的算法生活,更新每日一题的情况

    2022/3/4

    2104. 子数组范围和

    这题之前在周赛的时候做过,不过当时用的 python 且时间复杂度为 $ O(n^{2}) $ 但是超时了,今天的每日一题又遇到它啦,看了看题解好像大部分都是$ O(n^{2}) $ 的解法呀,可能当时代码写的有问题叭,今天再做一遍怎么又超时了!!!

    class Solution:
        def subArrayRanges(self, nums: List[int]) -> int:
            ans = 0
            for i in range(len(nums)):
                for j in range(i + 1, len(nums) + 1):
                    ans += max(nums[i:j]) - min(nums[i:j])
            return ans
    class Solution:
        def subArrayRanges(self, nums: List[int]) -> int:
            ans, n = 0, len(nums)
            for i in range(n):
                minVal, maxVal = inf, -inf
                for j in range(i, n):
                    minVal = min(minVal, nums[j])
                    maxVal = max(maxVal, nums[j])
                    ans += maxVal - minVal
            return ans

    我的做法是用py用多了,老想直接切片,这样耗时太多啦,使用 $ minval $ 和 $ maxval $ 来储存最大最小值能够省下一部分时间。

    但是这样还是 $ O(n^{2}) $ 的时间复杂度,怎么样才能进一步优化呢,这里可以使用单调栈,将时间复杂度压缩到 $ O(n) $ 显然我是不会用单调栈了,等啥时候学了再更新方法~

    2022/3/5

    521. 最长特殊序列 Ⅰ

    一个脑筋急转弯,如果两个字符串不相等则最长特殊序列就是两个字符串中较长的那个,否则没有子序列返回-1

    class Solution:
        def findLUSlength(self, a: str, b: str) -> int:
            return max(len(a), len(b)) if a != b else -1
    

    2022/3/6

    2100. 适合打劫银行的日子

    浙江农信银行出的题目,哈哈哈哈,用了前缀和的思想,很简单的一道题

    class Solution:
        def goodDaysToRobBank(self, security: List[int], time: int) -> List[int]:
            n = len(security)
            g = [0 for i in range(n)]
            for i in range(1,n):
                if security[i] > security[i - 1]:
                    g[i] = 1
                elif security[i] < security[i - 1]:
                    g[i] = -1
            a,b = [0 for i in range(n+1)],[0 for i in range(n+1)]
            for i in range(1,n+1):
                a[i] = a[i - 1] + (1 if g[i - 1] == 1 else 0)
                b[i] = b[i - 1] + (1 if g[i - 1] == -1 else 0)
            ans = []
            for i in range(time,n-time):
                if a[i - time + 1] == a[i + 1] and b[i + 1] == b[i + time + 1]:
                    ans.append(i)
            return ans

    2022/3/7

    504. 七进制数

    一个简单的数学题,由十进制转换成任意进制可以使用基数乘除法,本题指定为整数所以使用除基数取余法即可。虽然简单但是要记得处理 0 和 负数!

    class Solution:
        def convertToBase7(self, num: int) -> str:
            if num == 0:
                return '0'
            ans = ''
            flag = True
            if num < 0:
                num = - num
                flag = False
            while num:
                ans = str(num % 7) + ans
                num //= 7
            return ans if flag else '-' + ans

    2022/3/8

    2055. 蜡烛之间的盘子

    也是一道前缀和的题目,寻找$ [x, y] $之间的盘子数量可以理解为寻找这个区间内最左边和最右边蜡烛之间共有几个盘子,我们可以预先处理出left,right数组用来记录第 index 的最邻近左边或者右边的第一个盘子,然后用preSum求出到第 index 个字符之前一共有多少个盘子,直接 $ preSum[right] – preSum[left] $ 即可求出答案

    class Solution:
        def platesBetweenCandles(self, s: str, queries: List[List[int]]) -> List[int]:
            preSum = [0] * len(s)
            left,right = [0] * len(s), [0] * len(s)
            temp = -1
            for i in range(len(s)):
                if s[i] == '*':
                    preSum[i] = preSum[i-1] + 1
                else:
                    preSum[i] = preSum[i-1]
                    temp = i
                left[i] = temp
            temp = -1
            for i in range(len(s) - 1,-1,-1):
                if s[i] == '|':
                    temp = i
                right[i] = temp
            ans = []
            print(left)
            for i, (x, y) in enumerate(queries):
                x, y = right[x], left[y]
                if x >= 0 and y >= 0 and x < y:
                    ans.append(preSum[y] - preSum[x])
                else:
                    ans.append(0)
            return ans
  • 啤酒配真露

    昨天一个朋友推荐的真露混合啤酒一起喝超好喝,咱今天就试了试,呜呜呜有点上头,现在已经晕晕的了

    3月6日更新:

    呜呜呜,今天早上醒来就头好疼,胃难受,下次再也不能空腹喝酒了!!!

    我的酒量有点小呀,之前只喝过啤酒,第一次干了一整瓶烧酒加一瓶啤酒,嗝~

  • 时隔20天,重新备案

    上个月就收到阿里云的备案提醒,因为之前在阿里云备的案后来又转用腾讯云的服务器,阿里云就通知说要将备案转移,当时忘记了没转移备案,后来备案被注销了,网站访问不了了。就开始重新备案了,刚开始在腾讯云备案遇到点问题,备案虽然被注销了但是主体还没注销,变成了空壳主体还得等他们清理后才能重新备案,等了六七天才清理掉,加上备案十多天,呜呜呜,这半个多月博客一直处于打不开的状态~

  • Echo:留下你的一句话吧

    首页

    这是一个前后端分离的PHP程序,开发过程中学到很多有意思的前端知识。去年在酷Q平台上写过小纸船的插件,就是通过QQ机器人让大家可以发一段文字,一张图片,一句语音通过插件上传到服务器,再通过插件来随机的获取这文字,图片,语音,效果挺不错的,当时用户还挺多,后来嘛,QQ机器人的各大平台都倒了,酷Q也不例外,这个项目也就没再进行,现在又把平台迁移到了WEB,让它焕发新生吧,后期会增加投稿图片,投稿语音的功能,还会有匿名回复,邮件通知,而这些都是很久之前的项目小纸船就有的功能。

    演示地址:https://echo.shiyu.dev

    特点:

    首页句子加载采用Ajax技术,无刷新切换句子

        function update() {
            document.getElementById('update').innerHTML = '正在获取';
            $.get("model/api.php", function (data, status) {
                setTimeout(function () {
                    data = $.parseJSON(data);
                    if (status === 'success')
                        document.getElementById('echo').innerHTML = data['content']
                    else
                        alert("网络错误")
                    document.getElementById('update').innerHTML = '来一句?';
                }, 100)
            });
        }

    字体增添抖动特效

        @keyframes animate {
            0%, 100% {
                text-shadow: 0 0 0 #0ff, 2px 2px 0 #f00;
            }
            75% {
                text-shadow: 1px 1px 0 #0ff, -1px -1px 0 #f00;
            }
        }

    部分页面图片展示:

    投稿页面
    API页面

  • 我们成人啦

    [scode type=”share”] 不忘初心,为中华复兴立壮志凌云;砥砺前行,给青春梦想写绚丽篇章。[/scode]

    1.jpg
    2.jpg
    3.jpg