【Leetcode Sheet】Weekly Practice 22
Leetcode Test
1349 参加考试的最大学生数(12.26)
给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 '#' 表示;否则,用 '.' 表示。
学生可以看到左侧、右侧、左上、右上这四个方向上紧邻他的学生的答卷,但是看不到直接坐在他前面或者后面的学生的答卷。请你计算并返回该考场可以容纳的同时参加考试且无法作弊的 最大 学生人数。
学生必须坐在状况良好的座位上。
提示:
seats只包含字符'.' 和``'#'m == seats.lengthn == seats[i].length1 <= m <= 81 <= n <= 8
【记忆化搜索】1349. 参加考试的最大学生数 - 力扣(LeetCode)
class Solution {
public:int maxStudents(vector<vector<char>>& seats) {int m = seats.size(), n = seats[0].size();unordered_map<int, int> memo;auto isSingleRowCompliant = [&](int status, int row) -> bool {for (int j = 0; j < n; j++) {if ((status >> j) & 1) {if (seats[row][j] == '#') {return false;}if (j > 0 && ((status >> (j - 1)) & 1)) {return false;}}}return true;};auto isCrossRowsCompliant = [&](int status, int upperRowStatus) -> bool {for (int j = 0; j < n; j++) {if ((status >> j) & 1) {if (j > 0 && ((upperRowStatus >> (j - 1)) & 1)) {return false;}if (j < n - 1 && ((upperRowStatus >> (j + 1)) & 1)) {return false;}}}return true;};function<int(int, int)> dp = [&](int row, int status) -> int {int key = (row << n) + status;if (!memo.count(key)) {if (!isSingleRowCompliant(status, row)) {memo[key] = INT_MIN;return INT_MIN;}int students = __builtin_popcount(status);if (row == 0) {memo[key] = students;return students;}int mx = 0;for (int upperRowStatus = 0; upperRowStatus < 1 << n; upperRowStatus++) {if (isCrossRowsCompliant(status, upperRowStatus)) {mx = max(mx, dp(row - 1, upperRowStatus));}}memo[key] = students + mx;}return memo[key];};int mx = 0;for (int i = 0; i < (1 << n); i++) {mx = max(mx, dp(m - 1, i));}return mx;}
};
2660 保龄球游戏的获胜者(12.27)
给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。
保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10 。
假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:
- 如果玩家在该轮的前两轮的任何一轮中击中了
10个瓶子,则为2xi。 - 否则,为
xi。
玩家的得分是其 n 轮价值的总和。
返回
- 如果玩家 1 的得分高于玩家 2 的得分,则为
1; - 如果玩家 2 的得分高于玩家 1 的得分,则为
2; - 如果平局,则为
0。
提示:
n == player1.length == player2.length1 <= n <= 10000 <= player1[i], player2[i] <= 10
【模拟】
int score(const int *player, int playerSize) {int res = 0;for (int i = 0; i < playerSize; i++) {if ((i > 0 && player[i - 1] == 10) || (i > 1 && player[i - 2] >= 10)) {res += 2 * player[i];}else {res += player[i];}}return res;
}int isWinner(int* player1, int player1Size, int* player2, int player2Size){int s1 = score(player1, player1Size);int s2 = score(player2, player2Size);return s1 == s2 ? 0 : s1 > s2 ? 1 : 2;
}
2735 收集巧克力(12.28)
给你一个长度为 n 、下标从 0 开始的整数数组 nums ,表示收集不同巧克力的成本。每个巧克力都对应一个不同的类型,最初,位于下标 i 的巧克力就对应第 i 个类型。
在一步操作中,你可以用成本 x 执行下述行为:
- 同时修改所有巧克力的类型,将巧克力的类型
ith修改为类型((i + 1) mod n)th。
假设你可以执行任意次操作,请返回收集所有类型巧克力所需的最小成本。
提示:
1 <= nums.length <= 10001 <= nums[i] <= 1091 <= x <= 109
【枚举】
// 求和函数
long long sum(int *f, int n) {long long ans = 0;for (int i = 0; i < n; i++) {ans += f[i];}return ans;
}long long minCost(int *nums, int numsSize, int x){int n = numsSize;int *f = (int *)malloc(sizeof(int) * n);// 赋值num给fmemcpy(f, nums, sizeof(int) * n);// f求和,初始anslong long ans = sum(f, n);// k对应加成本次数for (int k = 1; k < n; k++) {// i代表从前往后的巧克力for (int i = 0; i < n; i++) {f[i] = fmin(f[i], nums[(i + k) % n]);}ans = fmin(ans, (long long)k * x + sum(f, n));}free(f);return ans;
}
2706 购买两块巧克力(12.29)
给你一个整数数组 prices ,它表示一个商店里若干巧克力的价格。同时给你一个整数 money ,表示你一开始拥有的钱数。
你必须购买 恰好 两块巧克力,而且剩余的钱数必须是 非负数 。同时你想最小化购买两块巧克力的总花费。
请你返回在购买两块巧克力后,最多能剩下多少钱。如果购买任意两块巧克力都超过了你拥有的钱,请你返回 money 。注意剩余钱数必须是非负数。
提示:
2 <= prices.length <= 501 <= prices[i] <= 1001 <= money <= 100
【排序】
int cmp(void *a,void *b){return *(int*)a-*(int*)b;
}int buyChoco(int* prices, int pricesSize, int money){qsort(prices,pricesSize,sizeof(int),cmp);int ret=money-prices[0]-prices[1];if(ret<0){return money;}return ret;
}
【1次遍历,找最小和次小】
int buyChoco(int* prices, int pricesSize, int money) {int fi = INT_MAX, se = INT_MAX;for (int i = 0; i < pricesSize; i++) {int price = prices[i];if (price < fi) {se = fi;fi = price;} else if (price < se) {se = price;}}return money < fi + se ? money : money - fi - se;
}
1185 一周中的第几天(12.30)
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。
提示:
- 给出的日期一定是在
1971到2100年之间的有效日期。
【模拟】
char * dayOfTheWeek(int day, int month, int year){char * week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};int monthDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};int days = 365 * (year - 1971) + (year - 1969) / 4;for (int i = 0; i < month - 1; ++i) {days += monthDays[i];}if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {days += 1;}days += day;return week[(days + 3) % 7];
}
1154 一年中的第几天(12.31)
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
提示:
date.length == 10date[4] == date[7] == '-',其他的date[i]都是数字date表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
【模拟】
int dayOfYear(char* date) {int year=0,month=0,day=0,count=0,n=strlen(date);for(int i=0;i<n;i++){int t;if(i>=0 && i<=3){//yeart=date[i]-'0';year=year*10+t;}else if(i>=5 && i<=6){//montht=date[i]-'0';month=month*10+t;}else if(i>=8 && i<=9){//dayt=date[i]-'0';day=day*10+t;}}//闰年bool flag=0;if((year%400==0) || (year%4==0 && year%100!=0)){flag=1;}//每个月days打表int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(flag){monthday[1]+=1;}for(int i=1;i<month;i++){count+=monthday[i-1];}count+=day;return count;
}
【cpp库函数】
class Solution {
public:int dayOfYear(string date) {tm dt;istringstream(date) >> get_time(&dt, "%Y-%m-%d");return dt.tm_yday + 1;}
};
为什么这周少一天
乐,因为之前一直是周二按每leetcode周的第一天来算的。正好今天是年底&&周日,遂直接总结吧。
ps:最后还是没有master algorithm before 2024。个人能力有限,任重而道远。
相关文章:
【Leetcode Sheet】Weekly Practice 22
Leetcode Test 1349 参加考试的最大学生数(12.26) 给你一个 m * n 的矩阵 seats 表示教室中的座位分布。如果座位是坏的(不可用),就用 # 表示;否则,用 . 表示。 学生可以看到左侧、右侧、左上、右上这四个方向上紧邻…...
ROS TF坐标变换 - 静态坐标变换
目录 一、静态坐标变换(C实现)二、静态坐标变换(Python实现) 如前文所属,ROS通过广播的形式告知各模块的位姿关系,接下来详述这一机制的代码实现。 模块间的位置关系有两种类型,一种是相对固定…...
香橙派5plus从ssd启动Ubuntu
官方接口图 我实际会用到的就几个接口,背面的话就一个M.2固态的位置: 其中WIFI模块的接口应该也可以插2230的固态,不过是pcie2.0的速度,背面的接口则是pcie3.0*4的速度,差距还是挺大的。 开始安装系统 准备工作 一张…...
JWT+Redis 实现接口 Token 校验
1、业务逻辑 有一些接口,需要用户登录以后才能访问,用户没有登录则无法访问。 因此,对于一些限制用户访问的接口,可以在请求头中增加一个校验参数,用于判断接口对应的用户是否登录。 而对于一些不需要登录即可访问的接…...
C语言 linux文件操作(二)
文章目录 一、获取文件长度二、追加写入三、覆盖写入四、文件创建函数creat 一、获取文件长度 通过lseek函数,除了操作定位文件指针,还可以获取到文件大小,注意这里是文件大小,单位是字节。例如在file1文件中事先写入"你好世…...
机器学习分类
1. 监督学习 监督学习指的是人们给机器一大堆标记好的数据,比如: 一大堆照片,标记出哪些是猫的照片,哪些是狗的照片 让机器自己学习归纳出算法或模型 使用该算法或模型判断出其他没有标记的照片是否是猫或狗 上述流程如下图所…...
CSS之元素转换
我想大家在写代码时有一个疑问,块级元素可以转换成其他元素吗? 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display:block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下: <!DO…...
自激振荡电路笔记 电弧打火机
三极管相关 三极管的形象描述 二极管 简单求解(理想) 优先导通(理想) 恒压降 稳压管(二极管plus) 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…...
Linux su 命令
Linux su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。 使用权限:所有使用者。 语法 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USE…...
论文阅读: AAAI 2022行人重识别方向论文-PFD_Net
本篇博客用于记录一篇行人重识别方向的论文所提出的优化方法《Pose-Guided Feature Disentangling for Occluded Person Re-identification Based on Transformer》,论文中提出的PDF_Net模型的backbone是采用《TransReID: Transformer-based Object Re-Identificati…...
蓝牙物联网灯控设计方案
蓝牙技术是当前应用最广泛的无线通信技术之一,工作在全球通用的 2.4GHZ 的ISM 频段。蓝牙的工作距离约为 100 米,具有一定的穿透性,没有方向限制。具有低成本、抗干扰能力强、传输质量高、低功耗等特点。蓝牙技术组网比较简单,无需…...
Codeforces Round 900 (Div. 3)(A-F)
比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k,就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…...
vue大屏-列表自动滚动vue-seamless-scroll
vue大屏-列表自动滚动vue-seamless-scroll vue-seamless-scroll的官方文档地址:https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/ 具体效果可到官方文档那里查看。 1、下载依赖 npm install vue-seamless-scroll --save2、使用例子 <template…...
easyx的窗口函数
文章目录 前言一、EasyX的颜色二、EasyX的坐标和设备1,EasyX的坐标2,EasyX的设备 三、窗口函数1,初始化窗口函数2,关闭绘图窗口3,设置窗口背景板颜色4,清空绘图设备 前言 easyx是针对c的图形库,…...
【记录】开始学习网络安全
本文持续更新学习进度 背景 在私企干了5年虚拟化、云原生相关的运维,学到了很多,但不成体系。老板是清华毕业法国留学在德勤干过,最后回国创业的野路子。我工作是为了更好的生活,我挺担心老板因为家庭变故或者炒个原油宝&#x…...
【Java EE初阶三 】线程的状态与安全(下)
3. 线程安全 线程安全:某个代码,不管它是单个线程执行,还是多个线程执行,都不会产生bug,这个情况就成为“线程安全”。 线程不安全:某个代码,它单个线程执行,不会产生bug,…...
MD5算法
一、引言 MD5(Message-Digest Algorithm 5)是一种广泛应用的密码散列算法,由Ronald L. Rivest于1991年提出。MD5算法主要用于对任意长度的消息进行加密,将消息压缩成固定长度的摘要(通常为128位)。在密码学…...
Postman使用
Postman使用 Pre-request Script 参考: Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script,在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据,也可以使用Pre-request Script来调试代码࿰…...
【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图
目录 目标:用python画出,网上流行的wordcloud词云图 1 准备工作 1.1环境准备 1.1.1安装步骤 1.2 资源准备 1.2.1 文本文件内容如下 1.2.2 图片资源 2 代码测试 2.1 第一版代码和效果 2.1.1 代码和效果 2.1.2 一般plt里解决中文乱码问题 2.1…...
MFC随对话框大小改变同时改变控件大小
先看一下效果; 初始; 窗口变大,控件也变大; 二个也可以; 窗口变大,控件变大; 默认生成的对话框没有WM_SIZE消息的处理程序;打开类向导,选中WM_SIZE消息,对CxxxDlg类添加该消息的处理程序;默认生成的函数名是OnSize; 添加了以后代码中会有三处变化; 在对话框类的…...
DDalkkak:逆向解析KakaoTalk数据库,实现聊天记录本地化备份与迁移
1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫aristoapp/DDalkkak。乍一看这个仓库名,可能有点摸不着头脑,但如果你对韩国本土的即时通讯应用KakaoTalk有所了解,或者对数据迁移、备份工具有需求,那这个项…...
Node.js代理池实战:proxy-agents库核心原理与高级应用
1. 项目概述与核心价值最近在折腾一些需要处理大量网络请求的自动化脚本,比如数据采集、API测试或者模拟用户操作,一个绕不开的痛点就是IP被封。单个IP频繁请求,对方服务器很容易就把你拉黑了。这时候,代理池就成了刚需。市面上成…...
学习信息系统项目管理师我们以什么视角学习?
如果你只是死记硬背那些定义,你会觉得这本书枯燥乏味,而且做题时很容易掉进陷阱。但如果你**“入戏”**,把自己当成那个掌握全局的项目经理,很多答案你凭直觉就能选对。为了帮你把“入戏”进行到底,我给你三个**“入戏…...
【Midjourney胶片摄影风格终极指南】:20年影像工程师亲授7种不可外传的参数组合与暗房逻辑复刻法
更多请点击: https://intelliparadigm.com 第一章:胶片摄影的数字复刻本质与Midjourney底层成像机制 胶片摄影的“颗粒感”“色偏”“晕影”并非缺陷,而是光化学反应在银盐乳剂中非线性响应的物理印记;Midjourney 并不模拟胶片&a…...
嵌入式核心板小型化设计:从邮票孔到板对板连接器的技术演进与应用
1. 项目概述:当“小”成为一种刚需在嵌入式硬件开发领域,我们常常面临一个经典的权衡:性能、成本与体积。过去,为了追求极致的稳定性和丰富的接口,核心板往往做得比较大,通过邮票孔或高密度连接器与底板固定…...
CloudCompare点云标注避坑实录:从‘No point in selection’到标签合并的正确姿势
CloudCompare点云标注实战避坑指南:从报错解析到高效标签管理 第一次打开CloudCompare准备标注点云时,我像大多数初学者一样,被那个简洁的界面迷惑了——看似简单的工具按钮背后,藏着不少让新手抓狂的"坑"。记得最初遇到…...
Mac玩转老游戏:手把手教你用Wineskin配置RPG Maker游戏所需RTP环境
Mac玩转老游戏:手把手教你用Wineskin配置RPG Maker游戏所需RTP环境 在Mac上重温经典RPG游戏是许多怀旧玩家的梦想,但RPG Maker游戏往往依赖Windows特有的运行时包(RTP),这让Mac用户望而却步。本文将带你深入探索如何利…...
SHA-3:从海绵构造到KECCAK-p,深入解析新一代哈希函数核心
1. 为什么我们需要SHA-3? 记得我第一次接触哈希函数时,用的还是SHA-1。那时候做文件校验,用SHA-1生成个摘要,感觉既方便又安全。直到后来看到新闻说SHA-1被破解了,我才意识到密码学世界的变化有多快。这就是SHA-3诞生的…...
Taotoken Token Plan套餐在实际开发中的成本控制体感
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken Token Plan套餐在实际开发中的成本控制体感 1. 套餐选择与预算锚定 在项目开发初期,团队或个人开发者面临的…...
别再裸发ROS图像了!手把手教你用image_transport优化带宽(附压缩参数配置)
机器人视觉开发者的带宽救星:深度解析ROS image_transport图像压缩实战 在机器人视觉应用开发中,高分辨率图像的实时传输常常成为性能瓶颈。当你的SLAM系统在Wi-Fi环境下频繁丢帧,或者目标检测算法因为图像延迟而失效时,问题的根源…...
