5508. 数的平方等于两数乘积的方法数 #模拟 #哈希表

题目链接

题意

给你两个整数数组nums1nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ):

  • 类型 1:三元组(i, j, k),如果 nums1[i]2 == nums2[j] * nums2[k] 其中 0 <= i < nums1.length 0 <= j < k < nums2.length
  • 类型 2:三元组 (i, j, k) ,如果nums2[i]2 == nums1[j] * nums1[k]其中 0 <= i < nums2.length0 <= j < k < nums1.length

分析

由于两数组的长度不超过1e3,直接将两数组内部的所有组合都枚举下来,并将其乘积存到map中。最后两数组每个元素进行平方,检查该结果是否在map标记过,若标记过,便累加。

typedef long long ll;
class Solution {
public:
int numTriplets(vector<int>& nums1, vector<int>& nums2) {
unordered_map<ll, int> map1, map2;
for(int i = 0; i < nums1.size(); i++){
for(int j = i + 1; j < nums1.size(); j++){
ll cur = 1ll * nums1[i] * nums1[j];
map1[cur]++;
}
}
for(int i = 0; i < nums2.size(); i++){
for(int j = i + 1; j < nums2.size(); j++){
ll cur = 1ll * nums2[i] * nums2[j];
map2[cur]++;
}
}
int ans = 0;
for(int i = 0; i < nums1.size(); i++){
ll cur = 1ll * nums1[i] * nums1[i];
if(map2[cur]) ans += map2[cur];
}
for(int i = 0; i < nums2.size(); i++){
ll cur = 1ll * nums2[i] * nums2[i];
if(map1[cur]) ans += map1[cur];
}
return ans;
}
};

5509. 避免重复字母的最小删除成本 #贪心

题目链接

题意

给定字符串 s 和整数数组 cost ,其中 cost[i] 是从s 中删除字符 i 的代价。

现要求将字符串任意相邻两个字母不相同最小删除成本。

分析

若有若干个重复的字符,我们只能保留其中一个。为保证代价最小,显然应该留下代价最大的。我们一趟遍历,实时检查当前字符是否与上一字符相等,如果相等,便累加代价、更新字符最大代价。当遇到不相等字符时,更新答案,重新计数重复次数。

class Solution {
public:
int minCost(string s, vector<int>& cost) {
char last = '#'; //记录上一字符
int mymax = cost[0]; //重复字符中代价最大
int cnt = 1; //记录某个字符的重复次数
int i = 0, sum = 0, len = s.length();
int tmpsum = 0; //累加重复字符的代价之和
while(i < len){
if(last == s[i]){ //说明当前字符与上一相邻字母重复
mymax = max(mymax, cost[i]);
tmpsum += cost[i];
cnt++;
}
else if(last != s[i]){
if(cnt > 1) sum += (tmpsum - mymax);
mymax = tmpsum = cost[i];
cnt = 1;
last = s[i];
}
i++; //O(n)
}
if(cnt > 1) sum += (tmpsum - mymax); //边界情况
return sum;
}
};

5510. 保证图可完全遍历 #并查集 #最小生成树

题目链接

题意

有一n阶无向图,并有三种类型的边:

  • 类型 1:只能由 Alice 遍历。

  • 类型 2:只能由 Bob 遍历。

  • 类型 3:Alice 和 Bob 都可以遍历。

给定数组 edges ,其中edges[i] = [typei, ui, vi],表示节点 uivi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 Alice和 Bob 完全遍历的前提下,找出可以删除最大边数。(如果从任何节点开始,Alice 和 Bob 都可以到达所有其他节点,则认为图是可以完全遍历的。)如果 Alice 和 Bob 无法完全遍历图,则返回 -1

样例

分析

如果同一子集用公共边(对应类型3的边)就能够走完,那么同一子集中无需使用Alice或Bob的特殊边(对应类型1/2的边),删除公共边造成的影响会比删除特殊边更大。我们暂时只考虑类型3的边,利用并查集,构建一棵类型3组成的最小生成森林,此处之所以说是森林,是因为单凭类型3的边不能保证整个图是连通的。在搭建森林时,我们就已经将多余的类型3的边去除掉,只保留最少的类型3的边,因而在并查集合并时需要统计下合并的边数量tree3

接下来我们要分别保证Alice和Bob能够完全遍历。即在原有的类型3的最小生成森林中,用类型2的边构建最小生成树,统计需要合并的类型2的边数量tree2,从而保证Bob在不多余边的情况下完全遍历;同理,原有的类型3的最小生成森林中构建类型1的边构建最小生成树,统计类型1的边tree1。最后计算edges.size() - (tree1 + tree2 + tree3),统计最终要删除的边数总和

class Solution {
private:
int fa1[100005] = {0}, fa2[100005] = {0};
public:
int findSet(int x, int fa[]){
if(x != fa[x]) fa[x] = findSet(fa[x], fa);
return fa[x];
}
void Union(int x, int y, int fa[]){
fa[y] = x;
}
int maxNumEdgesToRemove(int n, vector<vector<int>>& edges) {
int tree3 = 0, tree2 = 0, tree1 = 0;
for(int i = 1; i <= n; i++) fa1[i] = fa2[i] = i;
for(int i = 0; i < edges.size(); i++){
if(edges[i][0] != 3) continue;
int u = edges[i][1], v = edges[i][2];
int pu = findSet(u, fa1), pv = findSet(v, fa1);
if(pu != pv){
tree3++; Union(pu, pv, fa1);
}
} for(int i = 1; i <= n; i++) fa2[i] = fa1[i]; for(int i = 0; i < edges.size(); i++){
if(edges[i][0] != 1) continue;
int u = edges[i][1], v = edges[i][2];
int pu = findSet(u, fa1), pv = findSet(v, fa1);
if(pu != pv){
tree1++; Union(pu, pv, fa1);
}
}
for(int i = 0; i < edges.size(); i++){
if(edges[i][0] != 2) continue;
int u = edges[i][1], v = edges[i][2];
int pu = findSet(u, fa2), pv = findSet(v, fa2);
if(pu != pv){
tree2++; Union(pu, pv, fa2);
}
} int cnt1 = 0, cnt2 = 0;
for(int i = 1; i <= n; i++) {
if(fa1[i] == i) cnt1++;
if(fa2[i] == i) cnt2++;
} if(cnt1 != 1 || cnt2 != 1) return -1; return edges.size() - (tree1 + tree2 + tree3);
}
};

LeetCode周赛#205的更多相关文章

  1. leetcode 周赛 205 1576-5508-5509-5510

    第四题比较难,看题解用并查集做比较简单,但是我觉得难度在想到用并查集,可能是最近做题少所以想不到吧. 1 替换所有的问号 class Solution { public: string modifyS ...

  2. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  3. 【一天一道LeetCode】#205. Isomorphic Strings

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  4. Baozi Leetcode Solution 205: Isomorphic Strings

    Problem Statement Given two strings s and t, determine if they are isomorphic. Two strings are isomo ...

  5. 拼写单词[哈希表]----leetcode周赛150_1001

    题目描述: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我 ...

  6. 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)

    Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...

  7. 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)

    Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...

  8. 【Leetcode周赛】从contest-71开始。(一般是10个contest写一篇文章)

    Contest 71 () Contest 72 () Contest 73 (2019年1月30日模拟) 链接:https://leetcode.com/contest/weekly-contest ...

  9. 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

    Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...

随机推荐

  1. SpringBoot+Mybatis_Plus Generator

    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Control ...

  2. A*算法的有关知识--例子:最短路径问题

    前置知识 定义1,g(n)=从树根到节点n的代价.当算法处理到某个节点时,g(n)是可以精确计算的. 定义2,h*(n)=从节点n到目标节点的优化路径的代价.一般不可知. 定义3,f*(n)=g(n) ...

  3. Java并发队列与容器

    [前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一.本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark.Storm等源码的, ...

  4. uniapp微信小程序分享

    触发代码 如: <button open-type="share">分享</button> 在JS中 分享进入页面传参,和微信小程序路由传参的思路是一样的. ...

  5. CentOS下MYSQL数据库的主从备份配置

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/limingzhong198/articl ...

  6. 不能再被问住了!ReentrantLock 源码、画图一起看一看!

    前言 在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源.释放资源都是交给子类实现的,那子类是怎么 ...

  7. UOJ Round总结

    #22. [UR #1]外星人 一开始随便搞出第一问答案,很显然的性质对$x$有变化的$a$一定是递减的,就拿一个桶直接记录可以达到的值 然后我开始想第二问,一开始想直接在这个桶上统计答案,然后发现不 ...

  8. 9.mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 max_connections ...

  9. day83:luffy:添加购物车&导航栏购物车数字显示&购物车页面展示

    目录 1.添加购物车+验证登录状态 2.右上方购物车图标的小红圆圈数字 3.Vuex 4.购物车页面展示-后端接口 5.购物车页面展示-前端 6.解决一个购物车数量显示混乱的bug 1.添加购物车+验 ...

  10. Thinkphp3.2 cms之文章模块

    二.文章模块 <?php namespace Admin\Controller; use Think\Controller; class NewController extends Common ...