LeetCode 第 22 场双周赛(220/2041,前10.8%)

文章目录

    • 1. 比赛结果
    • 2. 题目
      • LeetCode 5348. 两个数组间的距离值 easy
      • LeetCode 5349. 安排电影院座位 medium
      • LeetCode 5350. 将整数按权重排序 medium
      • LeetCode 5351. 3n 块披萨 hard

1. 比赛结果

做出来了前3题,第4题有点难,感觉是动态规划。

全国排名:220 / 2041,10.8%;全球排名:729 / 5630,12.9%
在这里插入图片描述
在这里插入图片描述

2. 题目

LeetCode 5348. 两个数组间的距离值 easy

题目链接

给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值

「距离值」 定义为符合此描述的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d

示例 1:
输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2
输出:2
解释:
对于 arr1[0]=4 我们有:
|4-10|=6 > d=2 
|4-9|=5 > d=2 
|4-1|=3 > d=2 
|4-8|=4 > d=2 
对于 arr1[1]=5 我们有:
|5-10|=5 > d=2 
|5-9|=4 > d=2 
|5-1|=4 > d=2 
|5-8|=3 > d=2
对于 arr1[2]=8 我们有:
|8-10|=2 <= d=2
|8-9|=1 <= d=2
|8-1|=7 > d=2
|8-8|=0 <= d=2示例 2:
输入:arr1 = [1,4,2,3], arr2 = [-4,-3,6,10,20,30], d = 3
输出:2示例 3:
输入:arr1 = [2,1,100,3], arr2 = [-5,-2,10,-3,7], d = 6
输出:1提示:
1 <= arr1.length, arr2.length <= 500
-10^3 <= arr1[i], arr2[j] <= 10^3
0 <= d <= 100

解答:

  • 暴力查找即可
class Solution {
public:int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {int i, j, count = 0;bool flag;for(i = 0; i < arr1.size(); i++) {flag = true;for(j = 0 ; j < arr2.size(); j++){if(abs(arr1[i]-arr2[j]) <= d){flag = false;break;}}if(flag)count++;}return count;}
};

执行用时:8 ms
内存消耗:8.3 MB

LeetCode 5349. 安排电影院座位 medium

题目链接
在这里插入图片描述
如上图所示,电影院的观影厅中有 n 行座位,行编号从 1 到 n ,且每一行内总共有 10 个座位,列编号从 1 到 10 。

给你数组 reservedSeats ,包含所有已经被预约了的座位。比如说,researvedSeats[i]=[3,8] ,它表示第 3 行第 8 个座位被预约了。

请你返回 最多 能安排多少个 4 人家庭 。4 人家庭要占据 同一行内连续 的 4 个座位。隔着过道的座位(比方说 [3,3] 和 [3,4])不是连续的座位,但是如果你可以将 4 人家庭拆成过道两边各坐 2 人,这样子是允许的。

示例 1:
在这里插入图片描述

输入:n = 3, reservedSeats = [[1,2],[1,3],[1,8],[2,6],[3,1],[3,10]]
输出:4
解释:上图所示是最优的安排方案,总共可以安排 4 个家庭。
蓝色的叉表示被预约的座位,橙色的连续座位表示一个 4 人家庭。示例 2:
输入:n = 2, reservedSeats = [[2,1],[1,8],[2,6]]
输出:2示例 3:
输入:n = 4, reservedSeats = [[4,3],[1,4],[4,6],[1,7]]
输出:4提示:
1 <= n <= 10^9
1 <= reservedSeats.length <= min(10*n, 10^4)
reservedSeats[i].length == 2
1 <= reservedSeats[i][0] <= n
1 <= reservedSeats[i][1] <= 10
所有 reservedSeats[i] 都是互不相同的。

解题:

  • 超时做法,先按排,排序,然后按排,统计一排的情况,做出判断,判断n排
  • 缺点,n 非常大,会超时
    在这里插入图片描述
class Solution {	//超时代码
public:int maxNumberOfFamilies(int n, vector<vector<int>>& Seats) {int count = 0, line = 1, i = 0;sort(Seats.begin(), Seats.end(),[&](auto a, auto b){if(a[0] != b[0])return a[0] < b[0];return a[1] < b[1];});for(line = 1; line <= n; ++line){   bitset<11> b;while(i < Seats.size() && Seats[i][0] == line){b.set(Seats[i][1], 1);i++;}if(b.count() == 0 || (!b[2]&&!b[3]&&!b[4]&&!b[5]&&!b[6]&&!b[7]&&!b[8]&&!b[9]))count += 2;else if((!b[2]&&!b[3]&&!b[4]&&!b[5]) && (b[6]||b[7]||b[8]||b[9]))count += 1;else if((!b[6]&&!b[7]&&!b[8]&&!b[9]) && (b[2]||b[3]||b[4]||b[5]))count += 1;else if((!b[4]&&!b[5]&&!b[6]&&!b[7])&& (b[2]||b[3]) && (b[8]||b[9]))count += 1;}return count;}
};
  • 采用 map + bitset 存储 座位情况
  • 遍历 所有的 bitset ,分类讨论即可
  • 跳过没有座位坐人的排,直接 +2
class Solution {
public:int maxNumberOfFamilies(int n, vector<vector<int>>& Seats) {int count = 0, line = 1, i = 0;map<int,bitset<11>> m;//牌号,座位分布for(auto& st : Seats){m[st[0]].set(st[1]);}bitset<11> b;for(auto& mi : m)//遍历座位分布,m的size表示有人坐的排{   b = mi.second;if(!b[2]&&!b[3]&&!b[4]&&!b[5]&&!b[6]&&!b[7]&&!b[8]&&!b[9])count += 2;else if((!b[2]&&!b[3]&&!b[4]&&!b[5]) && (b[6]||b[7]||b[8]||b[9]))count += 1;else if((!b[6]&&!b[7]&&!b[8]&&!b[9]) && (b[2]||b[3]||b[4]||b[5]))count += 1;else if((!b[4]&&!b[5]&&!b[6]&&!b[7]) && (b[2]||b[3]) && (b[8]||b[9]))count += 1;}return count+2*(n-m.size());//没有人坐的,可以有2个家庭}
};

执行用时:180 ms
内存消耗:42.3 MB

LeetCode 5350. 将整数按权重排序 medium

题目链接

我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数:

  • 如果 x 是偶数,那么 x = x / 2
  • 如果 x 是奇数,那么 x = 3 * x + 1
    比方说,x=3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。

给你三个整数 lo, hi 和 k 。你的任务是将区间 [lo, hi] 之间的整数按照它们的权重 升序排序 ,如果大于等于 2 个整数有 相同 的权重,那么按照数字自身的数值 升序排序 。

请你返回区间 [lo, hi] 之间的整数按权重排序后的第 k 个数。

注意,题目保证对于任意整数 x (lo <= x <= hi) ,它变成 1 所需要的步数是一个 32 位有符号整数。

示例 1:
输入:lo = 12, hi = 15, k = 2
输出:13
解释:12 的权重为 912 --> 6 --> 3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 113 的权重为 9
14 的权重为 17
15 的权重为 17
区间内的数按权重排序以后的结果为 [12,13,14,15] 。对于 k = 2 ,答案是第二个整数也就是 13 。
注意,1213 有相同的权重,所以我们按照它们本身升序排序。1415 同理。示例 2:
输入:lo = 1, hi = 1, k = 1
输出:1示例 3:
输入:lo = 7, hi = 11, k = 4
输出:7
解释:区间内整数 [7, 8, 9, 10, 11] 对应的权重为 [16, 3, 19, 6, 14] 。
按权重排序后得到的结果为 [8, 10, 11, 7, 9] 。
排序后数组中第 4 个数字为 7 。示例 4:
输入:lo = 10, hi = 20, k = 5
输出:13示例 5:
输入:lo = 1, hi = 1000, k = 777
输出:570提示:
1 <= lo <= hi <= 1000
1 <= k <= hi - lo + 1

解题:

  • lambda 表达式自定义排序即可
class Solution {
public:int getKth(int lo, int hi, int k) {vector<int> v(hi-lo+1);int j = 0;for(int i = lo; i <= hi; i++)v[j++] = i;sort(v.begin(), v.end(),[&](int a, int b) {int wa = calw(a), wb = calw(b);if(wa == wb)return a < b;return wa < wb;});return v[k-1];}int calw(int x){int count = 0;while(x != 1){if(x%2)x = 3*x+1;elsex = x/2;count++;}return count;}
};

执行用时:236 ms
内存消耗:8.8 MB

LeetCode 5351. 3n 块披萨 hard

题目链接

给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:

  • 你挑选 任意 一块披萨。
  • Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨。
  • Bob 将会挑选你所选择的披萨顺时针方向的下一块披萨。
  • 重复上述过程直到没有披萨剩下。

每一块披萨的大小按顺时针方向由循环数组 slices 表示。

请你返回你可以获得的披萨大小总和的最大值

示例 1:
在这里插入图片描述

输入:slices = [1,2,3,4,5,6]
输出:10
解释:选择大小为 4 的披萨,Alice 和 Bob 分别挑选大小为 35 的披萨。
然后你选择大小为 6 的披萨,Alice 和 Bob 分别挑选大小为 21 的披萨。
你获得的披萨总大小为 4 + 6 = 10

示例 2:
在这里插入图片描述

输入:slices = [8,9,8,6,1,1]
输出:16
解释:两轮都选大小为 8 的披萨。如果你选择大小为 9 的披萨,你的朋友们就会选择大小为 8 的披萨,这种情况下你的总和不是最大的。示例 3:
输入:slices = [4,1,2,5,8,3,1,9,7]
输出:21示例 4:
输入:slices = [3,1,2]
输出:3提示:
1 <= slices.length <= 500
slices.length % 3 == 0
1 <= slices[i] <= 1000

解题:

  • 参考此处
    在这里插入图片描述
class Solution {
public:int maxSizeSlices(vector<int>& slices) {int i, j, n = slices.size()/3, k = slices.size();int prev_max = 0;vector<vector<int>> dp1(n,vector<int>(k,0));vector<vector<int>> dp2(n,vector<int>(k,0));dp1[0] = slices;dp2[0] = slices;for(i = 1; i < n; ++i){prev_max = 0;for(j = 0; j < k-1; ++j)//取第一块的情况,最后一个取不到,k-1{if(j-2 >= 0)//取第一块的情况prev_max = max(prev_max, dp1[i-1][j-2]);dp1[i][j] = prev_max + slices[j];}prev_max = 0;for(j = 1; j < k; ++j)//不取第一块的情况,从1开始{if(j-2 >= 1)//不取第一块的情况prev_max = max(prev_max, dp2[i-1][j-2]);dp2[i][j] = prev_max + slices[j];}}return max(*max_element(dp1[n-1].begin(),dp1[n-1].end()), *max_element(dp2[n-1].begin(),dp2[n-1].end()));}
};

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

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

相关文章

使用设备mac好还是随机mac好_省4000我给MBP16搭配了一块2T SSD:希捷 酷鱼飞翼 Fast SSD使用测评...

最近入手了MBP16&#xff0c;配置选择上纠结了一下。整体苹果的电脑后期基本没有什么升级的可能&#xff0c;所以选择了32G和1T的硬盘的配置。本身也想过硬盘是不是升级2T或者更高&#xff0c;但是想想每挑一格就是3000&#xff0c;腰包实在撑不起。我还是配合NAS和SSD级别的移…

修改终端服务器的最大连接数

1&#xff0e;明确终端服务的2种模式 ----Windows 2000终端服务有2种运行模式: 远程管理模式和应用程序服务器模式。远程管理模式允许系统管理员远程管理服务器&#xff0c;而且只允许2个终端会话同时登录终端服务器。应用程序服务器模式允许用户运行一个以上应用程序&#xff…

胡渊鸣:加一行import,让Python代码提速100倍!

文 | 丰色 发自 凹非寺源 | 量子位众所周知&#xff0c;Python的简单和易读性是靠牺牲性能为代价的——尤其是在计算密集的情况下&#xff0c;比如多重for循环。不过现在&#xff0c;大佬胡渊鸣说了&#xff1a;只需import 一个叫做“Taichi”的库&#xff0c;就可以把代码速度…

python3语音识别模块_『开源项目』基于STM32的智能垃圾桶之语音识别

大家好&#xff0c;我是『芯知识学堂』的SingleYork&#xff0c;前面给大家简单介绍了『开源项目』基于STM32的智能垃圾桶之成员简介&#xff0c;相信有很多小伙伴都已经忍不住跃跃欲试了&#xff0c;别着急&#xff0c;从这一篇开始&#xff0c;笔者将会带领大家一步一步来完成…

LeetCode 945. 使数组唯一的最小增量(贪心)

1. 题目 给定整数数组 A&#xff0c;每次 move 操作将会选择任意 A[i]&#xff0c;并将其递增 1。 返回使 A 中的每个值都是唯一的最少操作次数。 示例 1: 输入&#xff1a;[1,2,2] 输出&#xff1a;1 解释&#xff1a;经过一次 move 操作&#xff0c;数组将变为 [1, 2, 3]。…

突然发现被点名(理想恋人游戏)

被debbie点名了.从debbie那里也看到了一个理想好男人应该具有的特点,努力!不过一下子想不出来八个条件,想想再写.(注: 理想恋人游戏规则:被点到名的人&#xff0c;回答八个你理想恋人的条件。必须点名八个人一起与你玩游戏。如果被点名者&#xff0c;已完成这游戏&#xff0c;…

手机电脑的芯片主要是由_全体起立!苹果自研电脑芯片登场,iOS迎大更新…WWDC20精彩远不止这些...

科技观潮techsina与浪同行打造一个自己能全局掌控的硬件一个自己完全掌控的系统找人来开发App创造生态繁荣。让它有用、好用&#xff0c;让更多人用——这一系列动作&#xff0c;我们曾在iPhone的历史上都亲眼见证过。出品 / 新浪科技 ID&#xff1a;techsina作者 / 晓光视频 /…

有人已经在用AI画色图了...

文 | 雷叔说事知乎一最近&#xff0c;一些画师是真的有点急了。倒不是因为参加美国科罗拉多州博览会美术比赛没得奖而无能狂怒。是因为第一名&#xff0c;根本就不是个人。原来&#xff0c;在这届比赛中获得“数字艺术/数字修饰照片”大奖的作品是AI生成的。Jason Allen是一家桌…

LeetCode 1389. 按既定顺序创建目标数组

1. 题目 给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组&#xff1a; 目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i]&#xff0c;在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步&#xff0c;直到在 nums 和 i…

AlphaFold 2被曝真实场景的预测能力太差??

文 | 李梅、黄楠源 | AI科技评论2018 年&#xff0c;Deepmind 首次发布基于深度神经网络的蛋白质结构预测数据库 AlphaFold&#xff0c;在蛋白质预测中实现了最先进的性能&#xff1b;去年&#xff0c;AlphaFold 2 获得了 98.5% 的蛋白质预测率&#xff1b;前段时间&#xff0c…

外贸SOHO经验

经验一: SOHO的挂靠外贸公司的数字分析 我已经有3年多代理出口工作经验&#xff0c;结合我自己的工作经验和实际情况&#xff0c;想写一个文章来阐述一下这个话题&#xff0c;希望能够抛砖引玉&#xff0c;给广大的SOHO们一些启发。 SOHO与客户沟通3绝招 &#xff0…

平行空间怎么设置32位_高低床怎么设置不占空间

工作忙要父母带孩子或是有了二胎&#xff0c;房子紧张住不下。最简单实用的方法就是添置双层床。双层床怎样布置空间利用率更高&#xff0c;对于老人带孩子或不同年龄阶段的孩子还是有所差别的。常规的双层床都长这样的。双层床对于儿童最大的挑战就是安全问题&#xff0c;如果…

LeetCode 1390. 四因数

1. 题目 给你一个整数数组 nums&#xff0c;请你返回该数组中恰有四个因数的这些整数的各因数之和。 如果数组中不存在满足题意的整数&#xff0c;则返回 0 。 示例&#xff1a; 输入&#xff1a;nums [21,4,7] 输出&#xff1a;32 解释&#xff1a; 21 有 4 个因数&#x…

聊聊工业界“AI算法创新”乱象

文 | Sirius几天前&#xff0c;卖萌屋的一期推文《AI凉下来了&#xff1f;这可能是个好事》在短短几小时内获得近百次点赞在看和800多次转发&#xff0c;引起了不少小伙伴的共鸣。不过由于批判和叙事太过露骨&#xff0c;打马不彻底&#xff0c;导致删文。删文后&#xff0c;这…

个人编程思想理解的片段(主要是面向对象的,参考了许多人的观点,还不成熟,没形成系统,请大家多指点)...

编程思想的发展 面向过程 面向对象 新的发展对面向对象的补充有 面向方面面向对象的三种表现效果 封装 继承 多态面向对象的实质 用类对现实世界进行抽象&#xff0c;用对象对现实世界的存在和运行进行模拟&#xff0c;使程序世界更加接近于现实世界。 封…

LeetCode 1391. 检查网格中是否存在有效路径(BFS)

文章目录1. 题目2. 解题2.1 BFS2.2 爆栈的DFS2.3 不爆栈的DFS1. 题目 给你一个 m x n 的网格 grid。网格里的每个单元都代表一条街道。grid[i][j] 的街道可以是&#xff1a; 1 表示连接左单元格和右单元格的街道。2 表示连接上单元格和下单元格的街道。3 表示连接左单元格和下…

软件oem要注意什么_化妆品OEM客户要着重注意这3个基本点,不然就吃大亏了

作为品牌方客户&#xff0c;确定化妆品OEM代工后&#xff0c;虽然生产的一切事务由化妆品OEM工厂完成&#xff0c;但是仍然需要注意这3个基本点&#xff01;1. 合规性首先&#xff0c;产品只有备案流程全部完成&#xff0c;并且通过后才能进入市场销售&#xff0c;正常情况下是…

沉痛悼念!中国NLP 先行者、机器翻译鼻祖刘倬逝世

作者 | 李梅编辑 | 陈彩娴来源 | AI科技评论AI 科技评论获悉&#xff0c;中国机器翻译事业的开创者之一、原中国社科院语言研究所研究员刘倬老师与世长辞&#xff0c;享年 89 岁。沉痛悼念刘倬老师&#xff01;刘倬&#xff0c;1933 年 4 月 4 日生于河北省大成县。1949 年从北…

今天很累……

今天&#xff0c;用了一整天时间去研究解决Tapestry3.0的StaleLinkException问题&#xff0c;可能太集中精神了&#xff0c;下午到了快下班的时候感到十分疲倦&#xff0c;眼睛有点痛。Todays Conclusion&#xff1a;天外有天&#xff0c;人上有人&#xff0c;任何时候都需要自…

如何 给给软件开发 添加 代理_如何与软件开发公司有效沟通

从最初的想法到可运行的软件&#xff0c;软件开发过程是十分繁杂的&#xff0c;既不想被细节淹没&#xff0c;又希望留有控制力&#xff0c;与软件开发公司沟通要如何做才能事半功倍呢&#xff1f;1&#xff0c;共享业务语义所谓业务语义&#xff0c;就是需求背后所思所想&…