ARTS打卡 第四周

1、Algorithm 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 提示: 0 <= s.length <= 5 * 104 s 由英文字母、数字、符号和空格组成 思路 这道题主要用到思路是:滑动窗口 什么是滑动窗口? 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列! 如何移动? 我们只要把队列的左边的元素移出就行了,直到满足题目要求! 一直维持这样的队列,找出队列出现最长的长度时候,求出解! 时间复杂度:O(n)...

September 11, 2023 · 2 min · Egbert Ke

ARTS打卡 - 第三周

1、Algorithm 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k = 3 输出:2 提示: 1 <= nums.length <= 2 * 104 -1000 <= nums[i] <= 1000 -107 <= k <= 107 思路 我们可以基于方法一利用数据结构进行进一步的优化,我们知道方法一的瓶颈在于对每个 iii,我们需要枚举所有的 jjj 来判断是否符合条件,这一步是否可以优化呢?答案是可以的。 我们定义 pre[i]为[0..i]里所有数的和,则 pre[i]可以由 pre[i−1]递推而来,即: pre[i]=pre[i−1]+nums[i] 那么[j..i]这个子数组和为k这个条件我们可以转化为 pre[i]−pre[j−1]==k 简单移项可得符合条件的下标j需要满足: pre[j−1]==pre[i]−k 所以我们考虑以i结尾的和为k的连续子数组个数时只要统计有多少个前缀和为pre[i]−k的pre[j]即可。 代码 public class Solution { public int subarraySum(int[] nums, int k) { int count = 0, pre = 0; HashMap < Integer, Integer > mp = new HashMap < > (); mp....

September 4, 2023 · 2 min · Egbert Ke

ARTS打卡 - 第二周

1、Algorithm 换水问题 超市正在促销,你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水,那么水瓶就会变成空的。 给你两个整数 numBottles 和 numExchange ,返回你 最多 可以喝到多少瓶水。 示例 示例 1: 输入:numBottles = 9, numExchange = 3 输出:13 解释:你可以用 3 个空瓶兑换 1 瓶水。 所以最多能喝到 9 + 3 + 1 = 13 瓶水。 示例2 输入:numBottles = 15, numExchange = 4 输出:19 解释:你可以用 4 个空瓶兑换 1 瓶水。 所以最多能喝到 15 + 3 + 1 = 19 瓶水。 提示: 1 <= numBottles <= 100 2 <= numExchange <= 100 思路 首先我们一定可以喝到 bbb 瓶酒,剩下 bbb 个空瓶。接下来我们可以拿瓶子换酒,每次拿出 eee 个瓶子换一瓶酒,然后再喝完这瓶酒,得到一个空瓶。以此类推,我们可以统计得到答案。...

August 28, 2023 · 1 min · Egbert Ke

ARTS打卡 - 第一周

前言 我不是一个喜欢凑热闹的人, 越是热闹的东西,我越是不碰,似乎要与全世界作对,我不玩抖音、不玩微博等乱七八糟的东西,那铺面而来的信息令我惶恐不安。 但是这次不一样,陈皓老师在我前进的道路上给了我精神上很大的鼓舞,我还记得大约三年前,刚转正正式参加工作的时候,看着陈皓博客的文章,让我热血沸腾的感觉,心想有一天我也要成为这么牛逼的程序员。虽然我现在还远远没有达到,但是这种信念似乎还一直在我心中,这个更加重要。 多说几句吧 刚开始工作第一年,业余时间基本都在按照陈皓老师的专栏中介绍的路径在补充学习,汇编,unp,apue等,虽然现在几乎全忘光了,但是我怀念那种感觉。 陈皓老师去世了,世事无常阿卧槽! 1、Algorithm 颜色分类(荷兰国旗问题) 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。 你能想出一个仅使用常数空间的一趟扫描算法吗? 示例 输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2] 思路 双指针, 开始位置分别位于数组两端, 分别分割0和2的区域, 从左向右遍历,将0交换到左边, 将2交换到右边,然后处理一下终止和边界情况。 代码 class Solution: def sortcolors(self, nums: List[int]) -> None: n = len(nums) p0, p2 = 0, n - 1 i = 0 while i <= p2: while i <= p2 and nums[i] == 2: nums[i], nums[p2] = nums[p2], nums[i] p2 -= 1 if nums[i] == 0: nums[i], nums[p0] = nums[p0], nums[i] p0 += 1 i += 1 2、Review 分享一下medium中一篇关于规则引擎介绍的文章...

August 21, 2023 · 2 min · Egbert Ke

博客再再开张

大概在两年前,我写了一篇《博客再开张》的文章,记录了我的博客迁移之旅。 最近,我的博客再次迁移。 迁移到了github,使用hugo + papermod 强力驱动☺️ 为什么要迁移 说到底,就是维护成本 之前的维护成本为什么高 1,服务器 需要自己购买服务器,自运维,运维对象包括服务器续费,web服务维护(运行在docker中) 2,数据 博客数据需要定期备份, 写脚本定时dump下来,推送到github中存储起来 3,备案 之前有个备案站点,每年需要重新审核一次,而且我不太喜欢备案,现在已将备案信息删除,域名和服务器不再具有备案信息。 4,证书 免费证书每3个月需要维护一次,自动续期的话需要单独跑个进程。使用cloudflare服务的话,国内响应速度太慢。 所以,维护成本相对还是比较高的,加上平时业余时间不是很多,时间长了人就乏了,迫切需要维护成本低的博客方案。 为什么要写博客 有一天,我看到了别人的博客,看到他们写的文字,记录自己的想记录的东西。 我知道,那是我一直想做的事情,我必须继续做下去。 不写博客,当我回过头来,我会失落,会后悔,就这么感性的原因。 博客能记录自己文字,让自己的思绪有个干净的地方停留,以后能够回顾自己的心路历程。如果能给别人带来一些思考或者帮助,那也是极好的。 迁移之后维护成本为什么低 1,serverless 都是静态文件,no backend, no fucking logic. 2, continus deploy I just need write a fucking markdown and git push. 为什么一开始没有使用这个方案 一开始是在CSDN上写,写了110多篇,记录自己日常学习时候的小收获,包括刷的算法题,解决过的case等,那是最初纯粹的初衷。 然后,想自己徒手写博客,锻炼自己的工程能力,项目经验等,于是自己徒手撸了一个简单博客,前后端都自己写。 然后,感觉功能比较弱,想要一个类似wordpress的博客,于是选了typecho建立博客 然后,i have no much time. 想简单点,just write something. 但是又不想用CSDN这样的平台,因为感觉平台不纯粹, 我自己写的东西,被平台免费拿走去赚广告费,还因为用了他们免费的博客服务沾沾自喜,no. 于是到了现在这一步,serverless,纯静态站. 后续计划 1,博客迁移,将之前写的博客迁移到这个站点(不包括CSDN) 2,完善站点功能,评论,站点统计,可能还会加个adsence😋 朋友,你也开始写博客吧,You need it.

July 15, 2023 · 1 min · Egbert Ke