【2023.3.18 美团校招】

文章目录

  • 1. 小美剪彩带
  • 2. 最多修改两个字符,生成字典序最小的回文串
  • 美团面试手撕题

1. 小美剪彩带

在这里插入图片描述
题意:找出区间内不超过k种数字子数组的最大长度

使用双指针的方式,用哈希表来统计每个数出现次数。在双指针移动的过程中,动态的维护区间内不同数个数。具体的,当右端点遇到一个新的数时map的记录+1,当左端点删去一个只出现一次的数时map的记录-1,在这个过程中统计窗口最大值即可

首先用r指针不断往map中添加数据,直到map中的数据多于k个,此时让mp.size() = k + 1的元素4已经放入了mp,且r又++了(此时元素5还没放入map),不算map中最后放入的那个元素,map正好存放的是存放k种数字的所有元素

即r-1指向让mp.size() = k + 1的元素,r - 2指向最后一个让mp.size() = k的元素,需要计算 [l,r - 2] 区间长度

在这里插入图片描述

map中数据过多后,l指针右移,直到区间内数据不大于k,如此往复直到r越界

当r不断向右移动的过程中,若map没有先满,而是r越界了,此时情况不一样,需要记录的 [l,r - 1] 区间长度
在这里插入图片描述

#include<iostream>
#include<vector>
#include<unordered_map>using namespace std;int main() {int n, k;cin >> n >> k;if (k == 0) return 0;vector<int> nums(n, 0);for (int i = 0; i < n; i++) cin >> nums[i];int l = 0;int r = 0;int ans = 0;unordered_map<int, int> mp;  // <val, freq>while (r < n) {while (r < n && (int)mp.size() <= k) {mp[nums[r]]++;r++;}if ((int)mp.size() > k) {// 如果是因为mp装入太多数了,导致已经大于k了,退出while// 说明让mp.size() = k + 1的nums[r]已经放入了mp,且r又++了,需要减去1ans = max(ans, r - l - 1);}else {// 肯定是因为r == n了,mp.size()依然<=k,[l, r)区间内都是满足的ans = max(ans, r - l);break;}while (l <= r && (int)mp.size() > k) {mp[nums[l]]--;if (mp[nums[l]] == 0) mp.erase(nums[l]);l++;}}cout << ans << endl;return 0;
}

map中始终存放[l,r]区间内的数据,mp.size() <= k时不断右移 r 指针,mp.size()一旦大于k,就需要右移 l 指针

int main() {int n, k;cin >> n >> k;if (k == 0) return 0;vector<int> nums(n, 0);for (int i = 0; i < n; i++) cin >> nums[i];int l = 0;int r = 0;int ans = 0;// <val, freq>// 始终存放[l,r]区间内的数据,mp.size()一旦大于k,就需要移动l指针unordered_map<int, int> mp;  while (r < n) {mp[nums[r]]++;while (mp.size() > k) {mp[nums[l]]--;if (mp[nums[l]] == 0) mp.erase(nums[l]);l++;}ans = max(ans, r - l + 1);r++;}cout << ans << endl;return 0;
}

2. 最多修改两个字符,生成字典序最小的回文串

在这里插入图片描述

在这里插入图片描述
由于字符串经过修改一定为回文串,且最多修改两次,所以原字符串位置i与对称位置n-i-1不一样的个数最多为2。所以统计一下需要改的位置个数,记为cnt

  1. cnt=0,即原字符串就是回文串,找到第一个不为a的位置i,将i与对称位置n-i-1都改为a
aca      ---> aaa
acca     ---> aaaa
acbca    ---> aabaa 
  1. cnt=1,只有一个位置需要修改,此时分两种情况
    • 如果 i与对称位置n-i-1都不是a,将这俩位置都改为a即可
    • 如果 i与对称位置n-i-1只有一个为a,将另一个不是a的改为a。此时只改了一个字母,还可以改一个。当字符串长度为奇数时,将中间字符改为a
abcdba  ---> abaaba
abcea   ---> aacaa
cbcac   ---> caaac  
  1. cnt=2,两个对称位置需要修改, i与对称位置n-i-1,谁小就改为谁
abcde  ---> abcba
int main() {string s;cin >> s;int n = s.size();vector<int> idxs;for (int i = 0; i < n / 2; i++) {if (s[i] != s[n - 1 - i]) {idxs.push_back(i);}}int cnt = idxs.size();if (cnt == 0) {// 本身就是回文串,需要找到第一个不是a的地方修改for (int i = 0; i <= n / 2; i++) {if (s[i] != 'a') {s[i] = 'a';s[n - 1 - i] = 'a';break;}}}else if (cnt == 1) {// 只有一个需要修改的地方if (s[idxs[0]] != 'a' && s[n - 1 - idxs[0]] != 'a') {// 如果对称位置都不是a,则两个都改为as[idxs[0]] = 'a';s[n - 1 - idxs[0]] = 'a';}else {// 如果只有一个为a,则修改不是a的那个// 如果当前串为奇数,还要修改中间位置的为as[idxs[0]] = 'a';s[n - 1 - idxs[0]] = 'a';if (n & 1) {s[n / 2] = 'a';}}}else {// 有两个需要修改的地方,当前位置idxs[i]和对称位置n - 1 - idxs[i],谁小就改为谁for (int i = 0; i < cnt; i++) {char c = min(s[idxs[i]], s[n - 1 - idxs[i]]);s[idxs[i]] = c;s[n - 1 - idxs[i]] = c;}}cout << s << endl;return 0;
}

美团面试手撕题

重叠:矩形重合面积大于0

给出矩形的坐标和权值,如果有矩形重叠了,则删除权值较小的矩形,矩形重叠时若权值相同,则删除靠右的矩形。应保留尽可能多的矩形,使得最终剩下的矩形全都不重叠(如果权值大的矩形和两个权值小的矩形重叠,而两个小矩形不重叠,则应该删除两个权值小的矩形)

首先确定当前矩形中权值最大的矩形肯定不会被删除,用权值最大的矩形和剩下的所有矩形比较,重叠则删除,不重叠则保留。首先将当前权值最大的矩形放到ans中,然后用ans最后一个矩形和其他矩形比较,确定需要保留下来的矩形,然后把保留下来矩形的第一个存入ans,接下来再用ans最后一个矩形和保留下来的矩形比较,再确定需要保留下来的矩形…

判断矩形重叠时,将两个矩形映射到x和y轴上,比较x和y轴上两条线段的关系,不重叠有四种情况,剩下就是重叠的情况

在这里插入图片描述

class Cmp {
public:bool operator()(pair<int, vector<int>> rec1, pair<int, vector<int>> rec2) {if(rec1.first != rec2.first){// 权值降序return rec1.first > rec2.first;}// 左下角的横坐标升序return rec1.second[0] < rec2.second[0];}
};// vector中存放左下和右上的横纵坐标
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {if (rec2[0] >= rec1[2] || rec2[2] <= rec1[0]) return false;if (rec2[1] >= rec1[3] || rec2[3] <= rec1[1]) return false;return true;
}// 权值和坐标
vector<pair<int, vector<int>>> fun(vector<pair<int, vector<int>>> Rectangles) {vector<pair<int, vector<int>>> ans;if (Rectangles.empty()) return ans;sort(Rectangles.begin(), Rectangles.end(), Cmp());ans.push_back(Rectangles[0]);Rectangles.erase(Rectangles.begin());while (!Rectangles.empty()) {int n = Rectangles.size();vector<int> save;for (int i = 0; i < n; i++) {if (!isRectangleOverlap((ans.end() - 1)->second, Rectangles[i].second) ){save.push_back(i); // 和ans最后一个不重合,则保留下来}}vector<pair<int, vector<int>>> tmp;for (int i : save) {// tmp存放需要保留下来的矩形tmp.push_back(Rectangles[i]);}tmp.swap(Rectangles);if (!Rectangles.empty()) {ans.push_back(Rectangles[0]);Rectangles.erase(Rectangles.begin());}}return ans;
}

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

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

相关文章

【招聘直通车】美团公交业务部交通事业部招聘啦!

美团招聘直通车第四班起航啦&#xff5e;&#xff5e;&#xff5e; 美团交通事业部&公交业务部秉承“帮大家吃得更好&#xff0c;生活更好”的核心理念&#xff0c;致力于打造行业领先的智能出行平台&#xff0c;帮助用户更好的制定出行方案。 火车票业务自2015年上线以来&…

美团外卖【成都】技术团队,招人啦!

点击上方蓝字订阅&#xff0c;不错过下一次招聘消息 查看更多岗位信息&#xff0c;请点击“阅读原文”。

【美团面试】软件测试面试题

一、设计登录界面测试用例 功能测试(Function test) 0. 什么都不输入&#xff0c;点击提交按钮&#xff0c;看提示信息。&#xff08;非空检查&#xff09; 1.输入正确的用户名和密码&#xff0c;点击提交按钮&#xff0c;验证是否能正确登录。&#xff08;正常输入&#xff0…

【招聘直通车】美团LBS平台招聘专场来啦

美团招聘直通车第三班起航啦&#xff5e;&#xff5e;&#xff5e; LBS平台包含美团打车、地图业务部、大公交事业部等部门&#xff0c;其中美团打车能够满足用户的出行需求&#xff0c;为用户提供一站式“吃喝玩乐出行”的服务体验。 我们有超级数据大脑和大规模的分布式计算&…

【招聘直通车】美团地图服务部招聘啦!

美团招聘直通车第八班起航啦&#xff5e;&#xff5e;&#xff5e; 关于美团地图服务部 美团地图服务部是美团点评集团核心产品研发团队&#xff0c;承载来自美团点评集团各业务及用户的地图服务需求。核心职责包括为美团点评集团各业务提供业务定制化解决方案&#xff0c;建设…

从excel导入数据至PostgreSQL数据库

很多时候我们需要将excel中的数据导入到数据库的表中&#xff0c;我们以PostgreSQL数据库为例&#xff0c;步骤如下&#xff1a; 1、将excel文件转换为csv格式&#xff0c;方法如下&#xff1a; 文件-->另存为-->其他格式&#xff0c;保存类型下拉框中选择CSV格式。 2、p…

把postgresql中的表导入到mysql数据库中的两种方式

一般来说数据库表的导入导出都是在同一类型的数据库中操作比较常见&#xff0c;不同类型数据库之间的操作不太常见。因为毕竟不同类型数据库之间会有一些差别&#xff0c;在跨库导入的时候需要修改一些东西才能保证正常导入另一种类型数据库中。正好在工作中遇到了这种情况&…

PgAdmin导入导出单表数据---解决PgAdmin导入单表数据报错乱码问题

问题背景&#xff1a; 用PgAdmin导入导出单表的数据&#xff08;新数据库已经建好&#xff0c;只是导入单表数据&#xff09;。 数据格式为csv 旧数据库单表数据导入到新数据库单表中时&#xff0c;失败&#xff0c;报错都看不懂&#xff0c;是个乱码。 这里失败&#xff0c;然…

postgresql使用(一):TPC-H tools生成数据集并导入至postgre的数据库

本专题 postgresql使用&#xff08;一&#xff09;&#xff1a;TPC-H tools生成数据集并导入至postgre的数据库postgresql使用&#xff08;二&#xff09;&#xff1a;在TPC-H的数据库上pgbench 压力测试postgresql使用&#xff08;三&#xff09;&#xff1a;收集Postgresql数…

PostgreSQL使用PgAdmin导入数据

1.创建列 要设置主键&#xff1a; postgresql常用函数&#xff1e;序列函数nextval():设置主键自动增长_野生汪嘤嘤嘤的博客-CSDN博客_nextval() 2.导入数据 3.其他方式参考 Postgresql导入csv数据_弱弱的小菜鸡的博客-CSDN博客_postgresql导入csvPostgresql导入数据的方法h…

PostgreSQL数据库导入EXCEL数据表

气象监测数据下载&#xff08;可下载最新及每日气象数据&#xff09;NOAA气象日监测数据均值计算python代码整理PostgreSQL数据库导入EXCEL数据表 PG数据库版本为10.14.1。 首先&#xff0c;需要在PG数据库创建一个table&#xff0c;把需要的字段都创建好。我这儿是在pgAdmin里…

TPCH生成数据导入Postgres数据库

目录 1. 数据生成工具下载在degen目录下修改makefile在degen目录下修改tpcd.h在degen目录下执行命令生成dbgen和qgen文件在degen目录下生成.tlb数据查看生成的数据 2. 数据导入到Postgres数据库中创建数据库建表查看创建的表表中导入数据查看数据导入给表加约束 3. 生成查询语句…

pg数据库导入TPCH数据

一、安装pg数据库 Linux环境PostgreSQL源码编译安装 在Linux上安装pg数据库可以参考这篇博客 在Windows上安装pg数据库在官网上有简易的安装包 二、下载TPCH数据 可以从官网中下载&#xff0c;但是要填写一大堆资料&#xff0c;还可能半天通不过。 可以直接从下方的百度网盘…

chatgpt赋能python:Python访问Gauss数据库实现高效数据管理

Python访问Gauss数据库实现高效数据管理 介绍 在数据管理和分析的大数据背景下&#xff0c;Gauss数据库作为开源数据库管理系统具有广泛的应用。而作为强大的程序语言&#xff0c;Python也成为数据科学家和工程师的首选工具之一。本文将介绍Python如何访问Gauss数据库&#x…

“GPT-4时代来临:为何这一代AI模型让GPT-3.5相形见绌?“

这个东西太强大了&#xff0c;GPT-4不同于ChatGPT先前的模型GPT-3.5&#xff0c;它不仅可以接收文字&#xff0c;同时还可以接受图片&#xff0c;但是图片还未开放给大众&#xff0c;从OpenAI的官方视频可以看到一段非常厉害的片段。 这个人用笔在本子上随便画了个自己网站的草…

微信聊天记录数据分析

目录 一、项目背景 二、数据准备 三、数据预处理及描述性统计 四、数据分析 1.聊天小时、日、月分别汇总分布图 2.聊天时间序列分布图 3.高频词汇统计 4.词云图展示 五、其它探索性分析 一、项目背景 2021年2月20日我和我女朋友第一次见面&#xff0c;之后开启了我们两个人的故…

个人电子邮箱注册申请哪个更好用?

在邮箱刚刚兴起的时候&#xff0c;我注册了个人邮箱&#xff0c;平常会保存一些家庭照片以及重要的工作邮件&#xff0c;最近在清理电脑时不小心清理了重要的邮件。于是我在百度上搜索了一些怎么可以恢复邮件的攻略&#xff0c;网友回复说升级TOM个人邮箱会员有误删恢复的功能。…

数据科学家赚多少?数据全分析与可视化 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; AI 岗位&攻略系列&#xff1a;https://www.showmeai.tech/tutorials/47 &#x1f4d8; 本文地址&#xff1a;https://www…

人美声甜GPT,数学题哪里不会讲哪里

衡宇 发自 凹非寺量子位 | 公众号 QbitAI 大模型的颠覆和变革&#xff0c;还只是开始。 ChatGPT一炮而红&#xff0c;重塑搜索、办公协同等多个场景和行业后&#xff0c;在线教育&#xff0c;被视为最重要的垂直场景——毕竟大语言模型展示出的能力&#xff0c;正是之前在线教育…