Leetcode周赛复盘——第 71 场力扣双周赛与第 279 场力扣周赛

双周赛:

5984. 拆分数位后四位数字的最小和

class Solution:def minimumSum(self, num: int) -> int:a, b, c, d = sorted(list(map(int, str(num))))return 10 * (a + b) + c + d

str(num)得到字符串序列,然后用map函数对序列的每个字符转换为数字,最后变为列表并且排序,最小的两个数 a、b 一定在十位所以乘10,个位则是 c 和 d。

5985. 根据给定数字划分数组

我的:

class Solution:def pivotArray(self, nums: List[int], pivot: int) -> List[int]:s = []e = []l = []for i in nums:if i < pivot:s.append(i)elif i == pivot:e.append(i)else:l.append(i)return s+e+l

大佬的:

class Solution:def pivotArray(self, nums: List[int], pivot: int) -> List[int]:ans = []for x in nums:if x < pivot:ans.append(x)for x in nums:if x == pivot:ans.append(x)for x in nums:if x > pivot:ans.append(x)return ans

区别不大,我是用三个列表分别记录小于、等于和大于 pivot 的数,然后把它们加起来。当然也可以循环 nums 三次,依次添加三种数进入 ans 中。

5986. 设置时间的最少代价

class Solution:def minCostSetTime(self, startAt: int, moveCost: int, pushCost: int, targetSeconds: int) -> int:ans = 10**9 for tmp in range(10000):  # 0000 到 9999 即所有情况a = list(map(int, str(tmp)))last = startAtneed = 0for x in a:if x != last:need += moveCostlast = xneed += pushCostif tmp // 100 * 60 + tmp % 100 == targetSeconds:  # 正好是目标时间ans = min(ans, need)return ans

这题的基本思路是分类讨论,但是有点复杂。大佬的思路简单粗暴,直接枚举四个数字的所有情况,计算其代价,如果这四个数字对应的正好是目标时间,则比较其代价与当前最少代价,更新最少代价。

5987. 删除元素后和的最小差值

class Solution:def minimumDifference(self, nums: List[int]) -> int:n = len(nums) // 3left = [0 for _ in range(3 * n + 1)]        #左侧最小的n个数的和right = [0 for _ in range(3 * n + 1)]       #右侧最大的n个数的和l_max = []                          #每次要删除那个最大的数for i in range(3 * n):left[i + 1] = left[i] + nums[i]heapq.heappush(l_max, -1 * nums[i]) # 最大堆if n <= i:    # 堆中最多有 n 个元素,一旦超过就开始 popleft[i + 1] -= -1 * l_max[0]   # 最大的数会被 pop,所以要减去heapq.heappop(l_max)  # 删除堆中最大的数r_min = []                          #每次要删除那个最小的数for i in range(3 * n - 1, -1, -1):right[i] = right[i + 1] + nums[i]heapq.heappush(r_min, nums[i])  # 最小堆if i < 2 * n:  # 堆中最多有 n 个元素,一旦超过就开始 popright[i] -= r_min[0]  # 最小的数会被 pop,所以要减去heapq.heappop(r_min)  # 删除堆中最小的数res = float('inf')for i in range(n, 2 * n + 1):  # 枚举分割点cur = left[i] - right[i]   # 前面部分减后面部分的值res = min(res, cur)return res

周赛

6000. 对奇偶下标分别排序

我的:

class Solution:def sortEvenOdd(self, nums: List[int]) -> List[int]:n = len(nums)odds = [nums[i] for i in range(n) if i % 2 == 1]evens = [nums[i] for i in range(n) if i % 2 == 0]odds.sort(reverse=True)evens.sort()ans = []for i in range(n):if i % 2 == 0:ans.append(evens[i // 2])else:ans.append(odds[(i-1) // 2])return ans

大佬的:

class Solution:def sortEvenOdd(self, nums: List[int]) -> List[int]:a = sorted(nums[0::2])b = sorted(nums[1::2], reverse=True)to_ret = []while len(a)+len(b) > 0 :if len(a) > 0 :to_ret.append(a.pop(0))if len(b) > 0 :to_ret.append(b.pop(0))return to_ret

优化点:1、取奇偶下标的元素不需要判断下标的奇偶,只需要设置步长为 2 ,起点为 0、1即可;2、排序应习惯用 sorted ,可以少写一行;3、要从头开始取元素,可以用 pop(0)

6001. 重排数字的最小值

我的:

class Solution:def smallestNumber(self, num: int) -> int:if num < 0:num_list = list(map(int, str(num)[1:]))num_list.sort(reverse=True)ans = 0for i in range(len(num_list)):ans = ans * 10 + num_list[i]ans = -anselif num == 0:ans = 0else:num_list = list(map(int, str(num)))num_list.sort()num_zeros = num_list.count(0)ans = 0if num_zeros == 0:for i in range(len(num_list)):ans = ans * 10 + num_list[i]else:ans = num_list[num_zeros]for i in range(num_zeros):ans = ans * 10for i in range(num_zeros+1, len(num_list)):ans = ans * 10 + num_list[i]return ans

大佬的:

class Solution:def smallestNumber(self, num: int) -> int:if num == 0 :return numif num < 0 :return -int(''.join(sorted(str(num)[1:], reverse=True)))if num > 0 :num = str(num)ct = len([1 for t in num if t == '0'])num = sorted([t for t in num if not t == '0'])return int(num[0] + '0'*ct + ''.join(num[1:]))

虽然都是分类讨论找规律,但是在表达上我还是不够简洁。实际上就三种情况:num 等于 0,则返回 0;num 小于 0,则按照数字从大到小返回;num 大于 0,则取最小的正数作为第一个数,然后跟 0,最后是其余正数。

6002. 设计位集

class Bitset:def __init__(self, size: int):self.size = sizeself.listt = [0] * sizeself.vcount = 0   # 记录 1 的个数self.isflip = False # 记录是否翻转def fix(self, idx: int) -> None:if not self.isflip :if not self.listt[idx] == 1 :self.vcount += 1self.listt[idx] = 1else :if not self.listt[idx] == 0 :self.vcount += 1self.listt[idx] = 0def unfix(self, idx: int) -> None:if not self.isflip :if not self.listt[idx] == 0 :self.vcount -= 1self.listt[idx] = 0else :if not self.listt[idx] == 1 :self.vcount -= 1self.listt[idx] = 1def flip(self) -> None:self.isflip = not self.isflipself.vcount = self.size - self.vcountdef all(self) -> bool:return self.vcount == self.sizedef one(self) -> bool:return self.vcount > 0def count(self) -> int:return self.vcountdef toString(self) -> str:if not self.isflip :return ''.join([str(t) for t in self.listt])else :return ''.join([str(1-t) for t in self.listt])

这题很容易超时,必须优化,而优化的点主要是两个:1、翻转操作不需要真的翻转,只需要用一个布尔标志记录是否处于翻转状态即可;2、由于初始时全为 0,所以在赋值 1 时可以用一个变量记录 1 出现的次数,这样就不用每次都计算有多少个 1 了。

6003. 移除所有载有违禁货物车厢所需的最少时间

正统的做法是动态规划,参考这篇题解

class Solution:def minimumTime(self, s: str) -> int:n = len(s)suf = [0] * (n + 1)for i in range(n - 1, -1, -1):suf[i] = suf[i + 1] if s[i] == '0' else min(suf[i + 1] + 2, n - i)ans = suf[0]pre = 0for i, ch in enumerate(s):if ch == '1':pre = min(pre + 2, i + 1)ans = min(ans, pre + suf[i + 1])return ans

另外有一种做法挺有意思,如图所示:
在这里插入图片描述

class Solution:def minimumTime(self, s: str) -> int:lists = [1 if i == "1" else -1 for i in s]for i in range(1, len(lists)):if lists[i - 1] < 0:lists[i] += lists[i - 1]return len(lists) + min(min(lists), 0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用SWAGGER和ASP.NET CORE设置可选路由参数

使用SWAGGER和ASP.NET CORE设置可选路由参数根据OpenAPI 3.0&#xff0c;这是不可能的。但是&#xff0c;如果您真的希望成为现实呢&#xff1f;您是否必须解决并允许您的Swagger文档出错&#xff1f;我在这里向您展示如何使用Swagger和ASP.NET Core设置可选的路由参数。等等&a…

在数组中找重复数、只出现一次的数或丢失数的题目(Leetcode题解-Python语言)

在一维数组中的考察中&#xff0c;最常见的就是找出数组中的重复数、只出现一次的数或者丢失&#xff08;消失&#xff09;数等等。 一般来说&#xff0c;首先想到的就是用哈希表&#xff08;集合&#xff09;来记录出现过的数&#xff0c;基本所有的题都可以用集合来做&#…

Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!

“容器、Kubernetes、DevOps、微服务、云原生&#xff0c;这些技术名词的频繁出现&#xff0c;预兆着新的互联网技术时代的到来&#xff0c;大数据高并发将不再遥远&#xff0c;而是大部分项目都必须面对的&#xff0c;消息队列则是核心利器&#xff01;成熟的消息队列产品很多…

leetcode503. 下一个更大元素 II

一:题目 二:上码 class Solution { public:/**思路: 1.将两个nums拼接到一块这里拼接到一块,当我们最后的元素找不到比其大的时候 就会开始从头开始这样的话就可以继续进行 入栈 或者出栈的操作入栈就是比我栈顶小的元素&#xff0c;出栈的话 那就是 找到了比其大的元素了…

跟我一起学.NetCore之中间件(Middleware)应用和自定义

前言Asp.NetCore中的请求管道是通过一系列的中间件组成的&#xff0c;使得请求会根据需求进行对应的过滤和加工处理。在平时开发中会时常引用别人定义好的中间件&#xff0c;只需简单进行app.Usexxx就能完成中间件的注册&#xff0c;但是对于一些定制化需求还得自己进行处理和封…

leetcode42. 接雨水

一:题目 二:上码 // class Solution { // public: // /**超时 // 思路: // 1.我们按列来计算 这就是表明的是 我们求取接雨水 向上的高度就是雨水量 // 但是这里的话我们的需要对雨水的高度 来进行判定 // 2.那么如何判定…

Magicodes.IE之导入导出筛选器

总体设计Magicodes.IE是一个导入导出通用库&#xff0c;支持Dto导入导出以及动态导出&#xff0c;支持Excel、Word、Pdf、Csv和Html。在本篇教程&#xff0c;笔者将讲述如何使用Magicodes.IE的导入导出筛选器。在开始之前&#xff0c;我们需要先了解Magicodes.IE目前支持的筛选…

谈了千百遍的缓存数据的一致性问题

“灵魂拷问保证缓存和数据库的一致性很简单吗&#xff1f;有哪些方式能保证缓存和数据库的一致性呢&#xff1f;如果发生了缓存和数据库数据不一致的情况怎么办呢&#xff1f;在上篇文章我们介绍了缓存的定义分类以及优缺点等&#xff0c;如果还没看的同学可以移步这里听说你会…

BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统

一:项目背景 项目描述 一个基本功能较为完整的后台管理项目。项目主要功能有&#xff1a;登录验证&#xff0c;登录功能还加入了随机验证码的验证&#xff1b; 用户注册&#xff0c;注册中密码基于srping 安全框架提供的加密(自动加盐)的密码储存方式&#xff0c;对注册重名进…

Istio Pilot 源码分析(二)

张海东&#xff0c; ‍多点生活&#xff08;成都&#xff09;云原生开发工程师。本篇主要介绍 Pilot 源码中的 ServiceEntryStore 及其推送 xDS 的流程。本文为 Istio Pilot 源码分析系列的第二篇文章。Istio Pilot 源码分析&#xff08;一&#xff09;了解了 Pilot 源码的基本…

Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索&#xff0c;可以看到官方文档中两者对应的页面&#xff1a; 分别点击进去&#xff0c;第一个链接解释了什么是 torch.Tensor&#xff1a; torch.Tensor 是一个包含单一数据类型元素的多维矩阵&#xff08;数组&#xff09;。 正因为 torch.Tensor 只包…

leetcote34. 在排序数组中查找元素的第一个和最后一个位置

一:题目 二&#xff1a;上码&#xff08;暴力二分&#xff09; // class Solution { // public: // /** // 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// …

Git 图形化操作之合并提交记录

Git 图形化操作之合并提交记录独立观察员 2020 年 9 月 24 日目录1、显示日志2、合并提交记录3、推送合并的提交前言&#xff1a;当我们使用 Git 时&#xff0c;有时会遇到刚提交推送完一次修改&#xff0c;发现漏了该某处&#xff0c;只好又提交推送一次&#xff0c;这样在提交…

Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章&#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别&#xff0c;而这两者都是深拷贝的方法&#xff0c;返回张量的同时&#xff0c;会在内存中创建一个额外的数据副本&#xff0c;与原数据不共享内存&#xff0c;所以不受原数据改变的影响。 这里…

chrome禁止三方cookie,网站登录不了怎么办

背景新版chrome(80)浏览器默认屏蔽所有三方cookie已经不是什么新闻了&#xff0c;具体原因这里不去深究&#xff0c;有大量相关文章介绍&#xff0c;由于目前许多网站都依赖三方cookie&#xff0c;因此该特性的推出还是造成了一些的影响&#xff0c;比如收集用户信息的广告商&a…

leetcode69. x 的平方根

一:题目 二:上码 class Solution { public:/**思路:1.因为我们的 ans的平方 < x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans**/int mySqrt(int x) {int left 0; int right x;int ans 0;while (left < right) {long mid (right-left)/2 left;if (mid*…

初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

点击上方蓝字"小黑在哪里"关注我吧聚合根仓储领域服务BLOB储存应用服务单元测试模块引用前言在前两节中介绍了ABP模块开发的基本步骤&#xff0c;试着实现了一个简单的文件管理模块&#xff1b;功能很简单&#xff0c;就是基于本地文件系统来完成文件的读写操作&…

leetcode367. 有效的完全平方数

一:题目 二:上码 class Solution { public:/**完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半2.那么这就相当于在[left,num/2]中查找某个…

跟我一起学.NetCore之文件系统应用及核心浅析

前言在开发过程中&#xff0c;肯定避免不了读取文件操作&#xff0c;比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问&#xff1b;在配置文件读取章节中有说到&#xff0c;针对不同配置源数据读取由对应的IConfigurationProvider进行读取&#xf…