乐于分享
好东西不私藏

电脑C盘清理出50GB空间,还是微软自家人懂Windows垃圾清理

电脑C盘清理出50GB空间,还是微软自家人懂Windows垃圾清理

楔子

大家好,我是张桃狮。

最近我的电脑C盘剩余空间只有20多GB了,心中莫名焦虑起来。

我打开WizTree,查看都有哪些文件夹占用大量空间。

结果发现,那些能够叫得出名字的大文件夹都被我清理得差不多了,比如钉钉缓存之类的。

还有一些我叫不出名字的大文件夹,我也不敢随意删除,怕电脑报错。

这该怎么办呢?

要不装一下国内大厂出的电脑管家、电脑卫士?想想我就很头疼,因为这些软件本身就很流氓,各个“ 身怀绝技”。

我忽然想到微软官方曾经出过一个电脑管家,不知道好不好用。

我在Bing中搜索微软电脑管家,得到的都是Microsoft Store的链接,这个Microsoft Store在国内很难直接打开。

还好我在华军软件园找到了微软电脑管家绿色版。

安装的时候要点一个批处理命令,我第一次安装的时候失败了,使用管理员权限才安装成功。

安装好后,在\Microsoft.MicrosoftPCManager\files文件夹中可以找到一个叫微软电脑管家的快捷方式,双击就可以打开了。

点击电脑管家-存储-深度清理,可以看到很多可以清理的选项,不但包括第三方软件,也可以清理Windows系统垃圾。

这点是我最看好的,因为Windows系统文件夹的文件,我是真的不敢随便删除。

全部清理完后,我的电脑C盘剩余空间竟然达到50GB左右,这下我的C盘剩余空间不足焦虑症彻底好了。

注意,微软电脑管家最低系统版本要求Windows10 20H2,也就是19042。

如果点安装.bat没有任何反应,可能是上级和上上级目录名加起来太长了。如果当前路径包含空格或者括号,请重命名后再运行。

那么微软电脑管家和国内大厂出的电脑管家有什么不同呢?可能就是不会随便下崽和修改浏览器首页吧。

闲话讲完,咱们继续力扣刷题学编程。

力扣495. 提莫攻击

在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。

当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。

正式地讲,提莫在 t 发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。

给你一个 非递减 的整数数组 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。

返回艾希处于中毒状态的 总 秒数。

示例 1:

输入:timeSeries = [1,4], duration = 2输出:4解释:提莫攻击对艾希的影响如下:

  • • 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。
  • • 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。艾希在第 1、2、4、5 秒处于中毒状态,所以总中毒秒数是 4 。示例 2:

输入:timeSeries = [1,2], duration = 2输出:3解释:提莫攻击对艾希的影响如下:

  • • 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。
  • • 第 2 秒,提莫再次攻击艾希,并重置中毒计时器,艾希中毒状态需要持续 2 秒,即第 2 秒和第 3 秒。艾希在第 1、2、3 秒处于中毒状态,所以总中毒秒数是 3 。

提示:

1 <= timeSeries.length <= 0 <= timeSeries[i], duration <= timeSeries 按 非递减 顺序排列

我的思路

新建一个集合,将所有中毒时间都加进去,集合会自动去重,最后返回集合的长度。

class Solution:    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:        res=set()        for i in timeSeries:            for j in range(i,i+duration):                res.add(j)        return len(res)

提交后,发现超过时间限制了。

我发现超时的timeSeries数据茫茫多,每次中毒时间duration=100000,这样艾希还不会死吗?

要避免超时,必须将时间复杂度降下来。

我的代码时间复杂度是,要是能降到O(n)就好了。

一次遍历就得出结果。

我想到一个方法,先把timeSeries的长度记录下来,然后累加每次的中毒时间。

如果中毒时间没有重叠,就+duration-1。

如果中毒时间重叠,就+duration-1后,再把重叠部分减去。

class Solution:    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:        res=len(timeSeries)        j=0        for i , t in enumerate(timeSeries[:-1]):            if (t+duration-1-timeSeries[i+1])<0:                j=0            else:                j=t+duration-1-timeSeries[i+1]+1            res = res+duration-1-j        res += duration-1        return res

力扣提交通过,时间复杂度O(n),空间复杂度O(n)。

为了避免下标越界,我使用了切片[:-1],切片会占用额外的内存O(n)。

我懒得优化了,直接看官方题解吧。

力扣官方题解

方法一:单次扫描

class Solution:    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:        ans, expired = 0, 0        for i in range(len(timeSeries)):            if timeSeries[i] >= expired:                ans += duration            else:                ans += timeSeries[i] + duration - expired            expired = timeSeries[i] + duration        return ans

力扣提交通过,时间复杂度O(n),空间复杂度O(1)。

expired:上一次中毒结束时刻(毒失效的时间点)。

这个方法很不错,和我的列表元素两两比较大法比起来,简洁了许多。

评论区还有更简洁的代码。

力扣网友Subway的代码

class Solution:    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:        cnt=0        for i in range(1,len(timeSeries)):            cnt+=min(duration,timeSeries[i]-timeSeries[i-1])        return cnt+duration

力扣提交通过,时间复杂度O(n),空间复杂度O(1)。

思路跟我的基本一样,但是对代码做了优化,我喜欢。

我是个编程爱好者,小白级别的,如果你跟我一样希望通过力扣刷题,学习各种奇妙的算法,可以关注我,大家一起学习。

相关学习资料