LeetCode周赛#206
1583. 统计不开心的朋友 #模拟 #暴力
题目链接
题意
有n
为朋友,对每位朋友i
,preference[i]
包含 按亲密度从大到小 的朋友编号。
朋友们会被分为若干对,配对情况由pairs
数组给出,即pair[i]={xi, yi}
表示xi
与yi
相互配对。
当x
与y
相互配对且u
与v
相互配对的情况下,如果同时满足下面两个条件,x
就会不高兴:
x
->u
亲密度 大于x
->y
;u
->x
亲密度 大于u
->v
;
分析
初看题目,我以为一旦满足上述两条件,不但x
不高兴,u
也会不高兴。然而,这是错的。
对于数据6, preferences=[[1,4,3,2,5],[0,5,4,3,2],[3,0,1,5,4],[2,1,4,0,5],[2,1,0,3,5],[3,4,2,0,1]], pairs = [[3,1],[2,0],[5,4]]
,只有5
号是高兴的,这是因为5
号对4
号亲密度太高(rank=4),5
号只能去找1
(rank=5),然而1
号对3
号的亲密度更高(rank=5),被3
号锁住,因而5
是高兴的。
由此,我们不应该遍历pairs
,而是将pairs
中的配对情况记录到每个人身上,再遍历每个人,检查是否不开心。
下面代码中rank[i][j]
代表i
号对j
号的亲密度。而mypair[i]
代表i
在pair
中配对的另一个人编号。
class Solution {
private:
int rank[505][505], mypair[505];
public:
bool Judge(int cur, int n){ //判断是否不开心
int p = mypair[cur];
for (int i = 0; i < n; i++){
if(rank[cur][p] < rank[cur][i]
&& rank[i][mypair[i]] < rank[i][cur]) //按照题目要求
return true;
}
return false;
}
int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n - 1; j++)
rank[i][preferences[i][j]] = n - j; //存下i的朋友亲密度
for (int i = 0; i < n / 2; i ++){ //将每对pair中两人对应队友记录下来
mypair[pairs[i][0]] = pairs[i][1];
mypair[pairs[i][1]] = pairs[i][0];
}
int ans = 0;
for(int i = 0; i < n; i++)
if(Judge(i, n)) ans++;
return ans;
}
};
1585. 检查字符串是否可以通过排序子字符串得到另一个字符串 #暴力 #排序思想 #模拟
题目链接
题意
给定字符串s
和t
,可通过若干次的下述操作将s
转化为t
——选择s
中一个非空子字符串并将它包含的字符就地升序排序。现要你判断s
通过这些操作能否得到t
。其中子字符串定义为一个字符串中连续的若干字符。
分析
更详细的证明过程参考零神的题解
模拟s
到t
的过程,对t
串一个个字符进行考虑。首先考虑t[0]
(t
串的首字符)在s
串中首位置,记为s[t_0]
(=t[0]
)。我们怎么知道字符s[t_0]
能否通过排序使其放到s
首位呢?只有当s[t_0]
都小于s[0],s[1],...,s[t_0 - 1]
这些元素,即比s[t_0]
小的元素 都在s[t_0]
的右侧,这时候s[t_0]
有机会通过排序将原来位置降到s
的首位置。当我们比较完,确定满足该条件时,s[t_0]
以后不再考虑,转而考虑下一字符t[1]
,找到在s
中对应的 最前位置s[t_i]
,判断s[t_i]
能否移动到s
中的第1个位置…..
如何实现?我们为10
个数字的每个数字都准备一个队列,用来存储该数字在s
串中的位置。为什么要用队列?因为我们在检查cur
前面的数字是否在cur
左侧时,只需要用查询数字0,1,...,cur-1
的当前一个位置即可,若检查不出,说明可以将cur
搬到前面,接下来直接将该cur
的最新下标排除即可,模拟排序子过程。
class Solution {
public:
bool isTransformable(string s, string t) {
vector< queue<int> > pos(10);
for (int i = 0; i < s.length(); i++)
pos[s[i] - '0'].push(i); //存下每一种数字在s串中的位置
for (int i = 0; i < t.length(); i++){ //遍历t串中每一个字符
int cur = t[i] - '0';
if(pos[cur].empty()) //说明s串字符数量与t串不相等,显然无法满足题意
return false;
for (int j = 0; j <= cur; j++){ //检查s串中 比t[i]小 的字符 所在的下标
if(!pos[j].empty() && pos[j].front() < pos[cur].front())
return false;
//如果t串中t[i]的左边,存在一个比t[i]还小的字符,显然不能将t[i]冒泡到前面
}
pos[cur].pop(); //即时更新数字cur的下标
}
return true;
}
};
LeetCode周赛#206的更多相关文章
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- 【一天一道LeetCode】#206. Reverse Linked List
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...
- 拼写单词[哈希表]----leetcode周赛150_1001
题目描述: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我 ...
- 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)
Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...
- 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)
Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...
- 【Leetcode周赛】从contest-71开始。(一般是10个contest写一篇文章)
Contest 71 () Contest 72 () Contest 73 (2019年1月30日模拟) 链接:https://leetcode.com/contest/weekly-contest ...
- 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)
Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...
- 【Leetcode周赛】从contest-91开始。(一般是10个contest写一篇文章)
Contest 91 (2018年10月24日,周三) 链接:https://leetcode.com/contest/weekly-contest-91/ 模拟比赛情况记录:第一题柠檬摊的那题6分钟 ...
- 【Leetcode周赛】从contest-121开始。(一般是10个contest写一篇文章)
Contest 121 (题号981-984)(2019年1月27日) 链接:https://leetcode.com/contest/weekly-contest-121 总结:2019年2月22日 ...
随机推荐
- vue学习笔记(六) ----- vue组件
一.模块化与组件化 模块化的定义 模块化在Node中是一个规范,定义一些模块的相关的规则,从代码角度上来说,方便做区别,如果不使用模块化,写在js文件中不利于后期维护和扩展,从代码的层面上就把相关的功 ...
- 【DeepLearning】基本概念:卷积、池化、Backpropagation
终于有了2个月的空闲时间,给自己消化沉淀,希望别有太多的杂事打扰.在很多课程中,我都学过卷积.池化.dropout等基本内容,但目前在脑海中还都是零散的概念,缺乏整体性框架,本系列博客就希望进行一定的 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- Express 配置HTML页面访问
Express 配置HTML页面访问 1.配置模板引擎 Express默认的模板引擎是pug(jade),想要渲染html页面必须要导入对应的模板引擎ejs npm install ejs 安装完成在 ...
- DateTimeFormatter接替SimpleDateFormat
java程序猿经常会碰到的一个问题就是日期格式化.当接收参数中有日期或时间,那么就需要与前端商量好其格式,这边我知道是2种:1.时间戳 2.字符串. 先说一下时间戳,这个形势的参数,Java只需new ...
- error: invalid command ‘bdist_wheel‘
解决方法: pip3 install wheel 了解更多,请关注公众号
- Python3网络学习案例三:编写web server
1. 写在前面 这里总结的并不够详细,有时间了再进行补充. 2. 设计思路 HTTP协议是建立在TCP上的1. 建立服务器端TCP套接字(绑定ip,port),等待监听连接:listen(2. 打开浏 ...
- 【KataDaily 191015】Sort the Gift Code
题目: Happy Holidays fellow Code Warriors! Santa's senior gift organizer Elf developed a way to repres ...
- Java自动化测试框架-02 - TestNG之理论到实践
TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...
- Java每日一考202011.4
1.JDK,JRE,JVM三者之间的关系 JDK包含JRE,JRE包含JVM JDK=JRE+JAVA的开发工具 JRE=JVM+JAVA核心类库 2.为什么要配置环境变量? 希望在任何路径下都能执行 ...