LeetCode 第 19 场双周赛(231 / 1120,前20.6%)

文章目录

    • 1. 比赛结果
    • 2. 题目
      • LeetCode 5311. 将数字变成 0 的操作次数 easy
      • LeetCode 5312. 大小为 K 且平均值大于等于阈值的子数组数目 medium
      • LeetCode 5313. 时钟指针的夹角 medium
      • LeetCode 5314. 跳跃游戏 IV hard

1. 比赛结果

做出来了1, 3, 4题,第2题结束后12分钟做出来了。
全国排名:231/1120,20.6%;全球排名:772/3745,20.6%
在这里插入图片描述
在这里插入图片描述

2. 题目

LeetCode 5311. 将数字变成 0 的操作次数 easy

题目链接
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

示例 1:
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 27 是奇数,减 1 得到 6 。
步骤 36 是偶数,除以 2 得到 3 。
步骤 43 是奇数,减 1 得到 2 。
步骤 52 是偶数,除以 2 得到 1 。
步骤 61 是奇数,减 1 得到 0 。示例 2:
输入:num = 8
输出:4
解释:
步骤 18 是偶数,除以 2 得到 4 。
步骤 24 是偶数,除以 2 得到 2 。
步骤 32 是偶数,除以 2 得到 1 。
步骤 41 是奇数,减 1 得到 0 。示例 3:
输入:num = 123
输出:12提示:
0 <= num <= 10^6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解答:

class Solution {
public:int numberOfSteps (int num) {int count = 0;while(num){	if(num%2 == 0)num /= 2;elsenum -= 1;count++;}return count;}
};

LeetCode 5312. 大小为 K 且平均值大于等于阈值的子数组数目 medium

题目链接
给你一个整数数组 arr 和两个整数 k 和 threshold 。

请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。

示例 1:
输入:arr = [2,2,2,2,5,5,5,8], k = 3, threshold = 4
输出:3
解释:子数组 [2,5,5],[5,5,5][5,5,8] 的平均值分别为 456 。其他长度为 3 的子数组的平均值都小于 4 (threshold 的值)。示例 2:
输入:arr = [1,1,1,1,1], k = 1, threshold = 0
输出:5示例 3:
输入:arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5
输出:6
解释:前 6 个长度为 3 的子数组平均值都大于 5 。注意平均值不是整数。示例 4:
输入:arr = [7,7,7,7,7,7,7], k = 7, threshold = 7
输出:1示例 5:
输入:arr = [4,4,4,4], k = 4, threshold = 1
输出:1提示:
1 <= arr.length <= 10^5
1 <= arr[i] <= 10^4
1 <= k <= arr.length
0 <= threshold <= 10^4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-sub-arrays-of-size-k-and-average-greater-than-or-equal-to-threshold
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


解题:

一开始看错题,子数组,我看成,可以随意组合。。。
双指针解题即可。

class Solution {
public:int numOfSubarrays(vector<int>& arr, int k, int threshold) {int i = 0, j = k-1, n = arr.size(), sum=0, target = k*threshold;int count = 0;for(i = 0; i < k; i++) sum += arr[i];if(sum >= target)count++;i=1,j++;while(j < n){sum += arr[j]-arr[i-1];if(sum >= target)count++;i++,j++;}return count;}
};

LeetCode 5313. 时钟指针的夹角 medium

题目链接

给你两个数 hour 和 minutes 。请你返回在时钟上,由给定时间的时针和分针组成的较小角的角度(60 单位制)。

提示:
1 <= hour <= 12
0 <= minutes <= 59
与标准答案误差在 10^-5 以内的结果都被视为正确结果。

解题:

class Solution {
public:double angleClock(int hour, int minutes) {double d1 = 0, d2 = 0;d2 = minutes*6;d1 = (hour%12)*30 + double(d2)/360*30;return min(abs(d1-d2),360-abs(d1-d2));}
};

LeetCode 5314. 跳跃游戏 IV hard

题目链接

给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。

每一步,你可以从下标 i 跳到下标:

  • i + 1 满足:i + 1 < arr.length
  • i - 1 满足:i - 1 >= 0
  • j 满足:arr[i] == arr[j] 且 i != j

请你返回到达数组最后一个元素的下标处所需的 最少操作次数

注意:任何时候你都不能跳到数组外面。

示例 1:
输入:arr = [100,-23,-23,404,100,23,23,23,3,404]
输出:3
解释:那你需要跳跃 3 次,下标依次为 0 --> 4 --> 3 --> 9 。
下标 9 为数组的最后一个元素的下标。示例 2:
输入:arr = [7]
输出:0
解释:一开始就在最后一个元素处,所以你不需要跳跃。示例 3:
输入:arr = [7,6,9,6,9,6,9,7]
输出:1
解释:你可以直接从下标 0 处跳到下标 7 处,也就是数组的最后一个元素处。示例 4:
输入:arr = [6,1,9]
输出:2示例 5:
输入:arr = [11,22,7,7,7,7,7,7,7,22,13]
输出:3提示:
1 <= arr.length <= 5 * 10^4
-10^8 <= arr[i] <= 10^8

解题:

  • BFS, 广度优先搜索

开始想着用动态规划,后来知道不是,是最短路径问题。
先超时一次(连续一样的数,可以只插入最后一个即可,)
在这里插入图片描述
超时代码:

class Solution {
public:int minJumps(vector<int>& arr) {if(arr.size() == 1)return 0;int i, tp;const int n = arr.size();vector<int> dp(n, INT_MAX);queue<int> q;vector<bool> visited(n,false);q.push(0);visited[0] = true;dp[0] = 0;multimap<int, int> m;for(i = 1; i < n; i++)m.insert(make_pair(arr[i], i));while(!q.empty() && (dp[n-1] == INT_MAX)){tp = q.front();q.pop();if(tp+1 < n && !visited[tp+1]){dp[tp+1] = min(dp[tp+1], 1+dp[tp]);q.push(tp+1);visited[tp+1] = true;}if(tp-1>0 && !visited[tp-1]){dp[tp-1] = min(dp[tp-1], 1+dp[tp]);q.push(tp-1);visited[tp-1] = true;}if(dp[n-1] != INT_MAX)return dp[n-1];auto start = m.equal_range(arr[tp]).first, end = m.equal_range(arr[tp]).second;for(auto it = start; it != end; ++it){if(!visited[it->second]){visited[it->second] = true;dp[it->second] = min(dp[it->second], 1+dp[tp]);q.push(it->second);}if(dp[n-1] != INT_MAX)return dp[n-1];}}return dp[n-1];}
};

通过代码:172ms

class Solution {
public:int minJumps(vector<int>& arr) {if(arr.size() == 1)return 0;int i, tp, prev = arr[0];const int n = arr.size();vector<int> dp(n, INT_MAX);queue<int> q;vector<bool> visited(n,false);q.push(0);visited[0] = true;dp[0] = 0;multimap<int, int> m;for(i = 0; i < n; i++){if(arr[i] == prev)continue;else{m.insert(make_pair(prev, i-1));prev = arr[i];}}m.insert(make_pair(arr[n-1],n-1));while(!q.empty() && (dp[n-1] == INT_MAX)){tp = q.front();q.pop();if(tp+1 < n && !visited[tp+1]){dp[tp+1] = min(dp[tp+1], 1+dp[tp]);q.push(tp+1);visited[tp+1] = true;}if(tp-1>0 && !visited[tp-1]){dp[tp-1] = min(dp[tp-1], 1+dp[tp]);q.push(tp-1);visited[tp-1] = true;}if(dp[n-1] != INT_MAX)return dp[n-1];auto start = m.equal_range(arr[tp]).first, end = m.equal_range(arr[tp]).second;for(auto it = start; it != end; ++it){if(!visited[it->second]){visited[it->second] = true;dp[it->second] = min(dp[it->second], 1+dp[tp]);q.push(it->second);}if(dp[n-1] != INT_MAX)return dp[n-1];}}return dp[n-1];}
};

赛后优化代码如下:

class Solution {
public:int minJumps(vector<int>& arr) {if(arr.size() == 1)return 0;int i, tp, prev = INT_MIN, step = 0, size;const int n = arr.size();queue<int> q;vector<bool> visited(n,false);q.push(0);visited[0] = true;multimap<int, int> m;for(i = 0; i < n; i++){if(arr[i] == prev)continue;//跳过一样的else//只插入连续相同的一段的首尾,中间跳肯定不是最短距离{  if(i-1>=0)m.insert(make_pair(arr[i-1],i-1));m.insert(make_pair(arr[i], i));prev = arr[i];}if(i == n-1)//插入最后一个位置,可能重复插入了,但是不影响m.insert(make_pair(arr[i],i));}while(!q.empty()){size = q.size();while(size--){tp = q.front();q.pop();if(tp == n-1)return step;// 跳往i+1位置if(tp+1 < n && !visited[tp+1]){q.push(tp+1);visited[tp+1] = true;}// 跳往i-1位置if(tp-1>0 && !visited[tp-1]){q.push(tp-1);visited[tp-1] = true;}// 跳往值相同的位置auto start = m.equal_range(arr[tp]).first, end = m.equal_range(arr[tp]).second;for(auto it = start; it != end; ++it){if(!visited[it->second]){visited[it->second] = true;q.push(it->second);}}}step++;}return step;}
};

在这里插入图片描述

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

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

相关文章

【Spring Cloud中文社区】正式启动

前段时间&#xff0c;开了个关于Spring Cloud的交流群&#xff0c;短短两周时间就聚集了一批爱好者与实践者&#xff0c;每天在交流群中大家都进行着各种不同深度的探讨&#xff0c;但是这些高质量的聊天记录无法被搜索引擎收纳&#xff0c;导致很多不错的研究内容无法分享给网…

图谱实战 | 无本体约束的开放知识图谱构建:以OpenIE为代表的开放信息抽取项目技术方案解读...

目前&#xff0c;本体一直是知识图谱落地过程中的容易受到抨击的点&#xff0c;很多非专业用户对图谱的需求&#xff0c;其实并不想花费大量的时间去做本体约束&#xff0c;而是想直接拿来就用&#xff0c;开箱即用&#xff0c;以达到搜索与分析等目的。对本体的强专业性门槛&a…

计算机视觉,凉了?

计算机视觉是人工智能的关键领域之一&#xff0c;是一门研究如何使机器“看”的科学。近年来&#xff0c;尽管计算机视觉技术在学术上取得了长足的进步&#xff0c;但由于缺少“现金牛”应用&#xff0c;经常在网络上出现“计算机视觉凉凉了”的言论。其实这种观点是非常片面的…

LeetCode 1346. 检查整数及其两倍数是否存在(哈希)

1. 题目 给你一个整数数组 arr&#xff0c;请你检查是否存在两个整数 N 和 M&#xff0c;满足 N 是 M 的两倍&#xff08;即&#xff0c;N 2 * M&#xff09;。 更正式地&#xff0c;检查是否存在两个下标 i 和 j 满足&#xff1a; i ! j0 < i, j < arr.lengtharr[i]…

微服务架构的基础框架选择:Spring Cloud还是Dubbo?

最近一段时间不论互联网还是传统行业&#xff0c;凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验&#xff0c;这对于最近正在整理Spring Cloud相关套件内容与实例应用的我而言&#xff0c;…

自监督学习效果差?Meta AI 提出 Q-score 快速过滤错误样本!

文 | jxyxiangyu自监督学习指的是不依靠人工标注数据&#xff0c;直接从数据中学习到有用的特征表示。自监督学习中所采用的监督信息可以是“是否属于同一实例样本”的二分类标签&#xff08;对比学习&#xff09;&#xff0c;也可以是一段连续的自然语言文本的下一个词&#x…

LeetCode 1347. 制造字母异位词的最小步骤数

1. 题目 给你两个长度相等的字符串 s 和 t。每一个步骤中&#xff0c;你可以选择将 t 中的 任一字符 替换为 另一个字符。 返回使 t 成为 s 的字母异位词的最小步骤数。 字母异位词 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 输出&#xff1a;s &qu…

图谱实战 | 为什么我们需要医学知识图谱?

转载公众号 | OMAHA联盟 人工智能正在变得司空见惯。在医疗领域&#xff0c;医生也越来越重视人工智能所带来的疾病诊断效率和治疗价值的提升。要实现医疗人工智能&#xff0c;需要构建医学知识图谱以满足医疗领域对知识的应用需求。◆ ◆ ◆知识图谱是什么&#xff1f;知识图…

Spring Cloud构建微服务架构(三)断路器

在微服务架构中&#xff0c;我们将系统拆分成了一个个的服务单元&#xff0c;各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行&#xff0c;依赖通过远程调用的方式执行&#xff0c;这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延…

测试集涨点猛如虎,推上线无收益?算法新手翻车原因盘点!

文 | 杨旭东知乎在推荐算法领域&#xff0c;时常会出现模型离线评测效果好&#xff0c;比如AUC、准召等指标大涨&#xff0c;但上线后业务指标效果不佳&#xff0c;甚至下降的情况&#xff0c;比如线上CTR或CVR下跌。本文尝试列举一些常见的原因&#xff0c;为大家排查问题提供…

LeetCode 1348. 推文计数(哈希map+set)

1. 题目 请你实现一个能够支持以下两种方法的推文计数类 TweetCounts&#xff1a; recordTweet(string tweetName, int time) 记录推文发布情况&#xff1a;用户 tweetName 在 time&#xff08;以 秒 为单位&#xff09;时刻发布了一条推文。 getTweetCountsPerFrequency(s…

Spring Cloud构建微服务架构(二)服务消费者

在上一篇《Spring Cloud构建微服务架构&#xff08;一&#xff09;服务注册与发现》中&#xff0c;我们已经成功创建了“服务注册中心”&#xff0c;实现并注册了一个“服务提供者&#xff1a;COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢&#xff1f; Rib…

2202年了,继续大比拼ViT、MLP、CNN结构有意义吗??

文 | 卖萌菌近日&#xff0c;MSRA发布了一篇题为《Transformer不比CNN强 Local Attention和动态Depth-wise卷积前世今生》的博文&#xff0c;再次谈论了这个老生常谈的话题。文中提到&#xff0c;Depth-wise CNN 和 attention 存在高度相似的结构&#xff0c;调参优化之后&…

Spring Cloud构建微服务架构(一)服务注册与发现

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具&#xff0c;它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud包…

击败GPT3,刷新50个SOTA!谷歌全面统一NLP范式

文 | ZenMoore编 | 小轶写在前面一觉醒来&#xff0c;迷糊之中看到一条推特&#xff1a;瞬间清醒&#xff01;Google 的 Yi Tay (and Mostafa) 团队提出了一个新的策略 Mixture-of-Denoisers, 统一了各大预训练范式。重新思考现在的预训练精调&#xff0c;我们有各种各样的预训…

剑指Offer - 面试题3. 数组中重复的数字(哈希)

1. 题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1a; 输…

击败GPT3,刷新50个SOTA,谷歌全面统一NLP范式?

声明&#xff1a;本文原创首发于公众号夕小瑶的卖萌屋。作者&#xff1a;ZenMoore&#xff0c;编辑&#xff1a;小轶--->【我是传送门】写在前面一觉醒来&#xff0c;迷糊之中看到一条推特&#xff1a;瞬间清醒&#xff01;Google 的 Yi Tay (and Mostafa) 团队提出了一个新…

Spring Boot 2.3.0 发布

Spring Boot 2.3.0 已经发布&#xff0c;此版本主要更新内容包括&#xff1a; 依赖升级 新版本核心组件依赖升级 Spring Data NeumannSpring HATEOAS 1.1Spring Integration 5.3Spring Kafka 2.5Spring Security 5.3Spring Session Dragonfruit 三方组件依赖 Cassandra Dri…

剑指Offer - 面试题4. 二维数组中的查找(双指针)

1. 题目 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&…

涵盖1600+任务的巨型Benchmark来了!跑个测试花一周??

文 | 兔子酱最近&#xff0c;benchmanking又卷出了新高度&#xff0c;allen AI 前段时间发布了史上最强基准测试——NATURAL-INSTRUCTIONSv2&#xff0c;涵盖了1600个任务、70个不同任务类型、50种不同语言&#xff0c;用来测试生成模型的泛化性。论文标题&#xff1a;Benchmar…