力扣:第 304 场周赛

究极手速场

6132、使数组中所有元素都等于零

问题解析

题意:一个数组,你每次可以将数组的值减少一个整数,这个整数小于等于数组的最小正整数,问多少次操作可以将数组全部变为0

其实这题就是在问数组中有多少个不同的正整数罢了,因为每次操作,我们可以把数组中最小的正整数全部变成0。那么数组中有多少个不同的正整数,我们就减几次就可以了。

AC代码

class Solution {
public:int minimumOperations(vector<int>& nums) {sort(nums.begin(),nums.end());nums.erase(unique(nums.begin(), nums.end()), nums.end());return nums[0]==0?nums.size()-1:nums.size();}
};

6133. 分组的最大数量

问题解析

题意:一个数组,你要将数组分成几份,第i份的数字个数和数字总和要严格小于第i+1份,问你最多可以分成几份。

实际上,如果我们把数组升序排序就可以知道,只要第i+1份的数字个数大于第i份,那么i+1份的数组总和是一定大于第i份的,我们只要把小的数先分类好,再分大的即可。

那么问题就在数字个数上了,要尽可能多的分,那么贪心来说就要分成:一个数,两个数,三个树……,n个数这样,所以就看数组的长度按照这么分能满足分成多少组就行。

AC代码

class Solution {
public:int maximumGroups(vector<int>& grades) {int n=grades.size(),x=1,y=2;while(x<n)x+=y++;return n==x?y-1:y-2;}
};

6134. 找到离给定两个节点最近的节点

问题解析

题意:一个带环单向图,给你两个点,问这两个点都能到达的一个点且距离最近的点是哪个。

建图后进行两遍dfs,第一遍先按照node0为出发点进行dfs,记录下node0能到达的所有点,并记录下node0到达这些点的距离。

再以node1为起点dfs,也记录走过的路,如果遍历到的点在第一次dfs中被记录到了,说明这个点node0和node1都可以到达,然后根据这个点到达node0和node1的距离来更新答案即可。

但是这图是带环的,单纯dfs会t的,我们可以把走过的点打上标记,当走到重复的点时我们直接停下不走这个点。

AC代码

class Solution {
public:vector<int>v[100050];unordered_map<int,int>mymap;int st[100050],st2[100050],mx=1e9,pos=-1;void dfs(int x,int res){if(x==-1)return ;if(st[x]==1)return;st[x]=1;mymap[x]=res;for(auto i:v[x]){dfs(i,res+1);}}void dfs2(int x,int res){if(x==-1)return;if(st2[x]==1)return;st2[x]=1;if(mymap.count(x)){int t=max(mymap[x],res);if(t<mx){mx=t;pos=x;}else if(t==mx){mx=t;pos=min(pos,x);}}for(auto i:v[x]){dfs2(i,res+1);}}int closestMeetingNode(vector<int>& edges, int node1, int node2) {int n=edges.size();for(int i=0;i<n;i++){v[i].push_back(edges[i]);}dfs(node1,0);dfs2(node2,0);return pos;}
};

6135. 图中的最长环

问题解析

题意:一个单向图,让你找出最大的一个环,求这个环的长度。

我们用一个标记数组标记走过的所有点,建图后以每个点为起点进行一遍dfs,如果这个点已经被打上标记了,我们就不以它为起点dfs。

每次dfs记录起点y到当前点x的距离,并且记录从起点出发一共走了多少距离,如果我们走到y点发现这个点已经被打上标记了,那么就有两种可能

  1. 这个点是其它点之前dfs时被打上标记的,那么起点到当前点的距离就等于起点走过的距离,没有环。
  2. 这个点我们在这一次dfs走过了两次,那么起点到当前点的距离就小于起点走过的距离,有环,而这段距离的差值就是环的大小。

我们只要维护环的最大值即可。

AC代码

class Solution {
public:vector<int>v[100050];int len=-1;int st[100050];unordered_map<int,unordered_map<int,int>>mymap;void dfs(int x,int y,int res){if(x==-1)return;if(mymap[y].count(x)){mymap[y][x]=min(mymap[y][x],res);}else mymap[y][x]=res;if(st[x]==1){if(res==mymap[y][x])return;else {len=max(len,res-mymap[y][x]);return;}}st[x]=1;for(auto i:v[x]){dfs(i,y,res+1);}}int longestCycle(vector<int>& edges) {int n=edges.size();for(int i=0;i<n;i++)v[i].push_back(edges[i]);for(int i=0;i<n;i++){if(st[i]==0)dfs(i,i,0);}return len;}
};

力扣:第 304 场周赛相关推荐

  1. 20220307:力扣第283场周赛(上)

    力扣第283场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 Excel 表中某个范围内的单元格 向数组中追加 K 个整数 思路与算法 第一题直接模拟即可,注意作为char的数字也是可以直接自 ...

  2. 20220228:力扣第282场周赛(下)

    力扣第282场周赛(下) 题目 思路与算法 代码实现 写在最后 题目 完成旅途的最少时间 完成比赛的最少时间 思路与算法 完成旅途的最少时间: 二分模板题,注意初始化左右边界的话,速度会提升很多. 完 ...

  3. 20220227:力扣第282场周赛(上)

    力扣第282场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 统计包含给定前缀的字符串 使两字符串互为字母异位词的最少步骤数 思路与算法 第二题直接并集减去交集,简单的集合运算,当然也可以换C ...

  4. 20220213:力扣第280场周赛(上)

    力扣第280场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 得到 0 的操作数 使数组变成交替数组的最少操作数 思路与算法 简单模拟即可,所谓辗转相除法 哈希处理,然后找到最大和次大值即可. ...

  5. 20220212:力扣第277场周赛(下)

    力扣第277场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 找出数组中的所有孤独数字 基于陈述统计最多好人数 思路与算法 找出数组中的所有孤独数字 按照题意模拟即可,使用map来统计即可. ...

  6. 20220123:力扣第277场周赛(上)

    力扣第277场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 元素计数 按符号重排数组 思路与算法 元素计数 按符号重排数组 无需多言,直接按照题目实现就行了,过于敷衍了这两个题,简单记录一下 ...

  7. 20220104:力扣第274场周赛(下)

    力扣第274场周赛(下) 题目 思路与算法 代码实现 写在最后 题目 摧毁小行星 参加会议的最多员工数 思路与算法 第3题简单模拟即可,注意使用long long格式进行保存累加结果.有二元组的简单比 ...

  8. 20220103:力扣第274场周赛(上)

    力扣第274场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 检查是否所有 A 都在 B 之前 银行中的激光束数量 思路与算法 前两道都是简单的模拟,注意特殊情况的处理即可.第二个就是简单的相 ...

  9. 20211205:力扣第270场周赛(上)

    力扣第270场周赛(上) 题目 思路与算法 代码实现 写在最后 题目 找出 3 位偶数 删除链表的中间节点 思路与算法 找出 3 位偶数:遍历所有数字得到3位数字,前导不为0即表示大于等于100,先用 ...

  10. 20210314:力扣第 232 场周赛

    力扣第 232 场周赛 题目 思路与算法 代码实现 写在最后 题目 仅执行一次字符串交换能否使两个字符串相等 找出星型图的中心节点 最大平均通过率 好子数组的最大分数 思路与算法 仅执行一次字符串交换 ...

最新文章

  1. python输入是什么类型_python入门04——输入输出
  2. 文件服务器高可用群集,fastDFS文件服务器(三):集群和高可用环境篇
  3. NLP:以周杰伦的《Mojito》歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号
  4. 离散图 java,Java实现离散Arnold变换(图像处理)
  5. hive 2.3 mysql_Note23:Hive-2.3.6安装配置
  6. python偶数个数_python基础
  7. 计算机的组成 —— PCI(PCIE)、PCB
  8. vue前端项目中excel文件下载
  9. MFC TeeChart 用法整理二
  10. 用VB 代码读取 Excel 内容
  11. 最优化内外点法matlab实现
  12. 计算百分比的分析函数
  13. WindowsXP SP3 AFD.sys 本地拒绝服务漏洞的挖掘过程
  14. Counterfit 部署教程
  15. 我的梦想是成为一名计算机程序员英语怎么说,I dream of becoming a programmer in the future 我梦想将来当一名程序员...
  16. 二十三、小程序中的三级下拉框(下拉菜单)
  17. SpringMVC实现全局异常处理器
  18. QT自定义控件之车辆远近光灯
  19. 首页大广告展示——淘淘商城(十六)
  20. oracle大型数据库系统在aix/unix上的实战详解 pdf,Oracle10g在AIX上的安装准备工作《Oracle大型数据库系统在AIX/unix上的实战详解》集中答疑40...

热门文章

  1. netstat -ano 查看端口是否被占用
  2. 阿里云盘终于可以分享文文件了!!!
  3. 视频剪辑没素材?一定要收藏这几个网站。
  4. Java AQS的实现原理(大部分同步类都依赖AQS实现)
  5. 【youcans 的 OpenCV 例程200篇】121. 击中-击不中用于特征识别
  6. a8处理器相当于骁龙几_曾受人追捧的A8处理器,放在现在是什么水平了?
  7. 面试遇到这么一位满嘴骚话的 HR,真牛皮!
  8. 倍福--授权文件拷贝
  9. linux快速查找文件
  10. 拼多多改销量10+是怎么回事