LeetCode 1562. 查找大小为 M 的最新分组
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个数组 arr ,该数组表示一个从 1 到 n 的数字排列。有一个长度为 n 的二进制字符串,该字符串上的所有位最初都设置为 0 。
在从 1 到 n 的每个步骤 i 中(假设二进制字符串和 arr 都是从 1 开始索引的情况下),二进制字符串上位于位置 arr[i] 的位将会设为 1 。
给你一个整数 m ,请你找出二进制字符串上存在长度为 m 的一组 1 的最后步骤。一组 1 是一个连续的、由 1 组成的子串,且左右两边不再有可以延伸的 1 。
返回存在长度 恰好 为 m 的 一组 1 的最后步骤。如果不存在这样的步骤,请返回 -1 。
示例 1:
输入:arr = [3,5,1,2,4], m = 1
输出:4
解释:
步骤 1:"00100",由 1 构成的组:["1"]
步骤 2:"00101",由 1 构成的组:["1", "1"]
步骤 3:"10101",由 1 构成的组:["1", "1", "1"]
步骤 4:"11101",由 1 构成的组:["111", "1"]
步骤 5:"11111",由 1 构成的组:["11111"]
存在长度为 1 的一组 1 的最后步骤是步骤 4 。示例 2:
输入:arr = [3,1,5,4,2], m = 2
输出:-1
解释:
步骤 1:"00100",由 1 构成的组:["1"]
步骤 2:"10100",由 1 构成的组:["1", "1"]
步骤 3:"10101",由 1 构成的组:["1", "1", "1"]
步骤 4:"10111",由 1 构成的组:["1", "111"]
步骤 5:"11111",由 1 构成的组:["11111"]
不管是哪一步骤都无法形成长度为 2 的一组 1 。示例 3:
输入:arr = [1], m = 1
输出:1示例 4:
输入:arr = [2,1], m = 2
输出:2提示:
n == arr.length
1 <= n <= 10^5
1 <= arr[i] <= n
arr 中的所有整数 互不相同
1 <= m <= arr.length
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-latest-group-of-size-m
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {public:int findLatestStep(vector<int>& arr, int m) {int n = arr.size(), i, ans = -1;vector<vector<int>> pos(n+2, vector<int>(2, -1));//存储该组的左右端点位置vector<int> len(n+1, 0);//长度为x的有多少组int l1,r1,l2,r2,n1,n2,nall,l,r;for(i = 0; i < n; ++i){l = r = arr[i];nall = 1;n1 = n2 = 0;if(pos[l-1][0] != -1)//左边存在{l1 = pos[l-1][0];r1 = pos[l-1][1];n1 = r1-l1+1;}if(pos[l+1][0] != -1)//右边存在{l2 = pos[l+1][0];r2 = pos[l+1][1];n2 = r2-l2+1;}if(n1){l = min(l, l1);nall += n1;len[n1]--;}if(n2){r = max(r, r2);nall += n2;len[n2]--;}len[nall]++;pos[l][0] = l;pos[l][1] = r;pos[r][0] = l;pos[r][1] = r;if(len[m])ans = i+1;}return ans;}
};
648 ms 127.7 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1562. 查找大小为 M 的最新分组相关推荐
- leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
署名:csdn等网站博客copy产出,AI时代知识新搬运工 言归正传:写下这道题的个人理解 题干: 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的 ...
- Leetcode04--给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
文章目录 题目 一.归并算法 二.二分查找法 题目 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数. 进阶:你能设计一个时间复杂度 ...
- 七十六、Python | Leetcode二分查找和分治算法系列
@Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 给定数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
1. 问题描述 给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X.给出一个O(nlg(n))的算法. 2. 解决思路 首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nl ...
- LeetCode学习-查找2-合并版
LeetCode学习-查找 几个基本数据结构 一,查找表 349,求公共元素 242,判断两字符串是否字母相同 202,快乐数问题 290,模式匹配(需理清思路) 205,同构 451,对出现频率排序 ...
- linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件
本问题已经有最佳答案,请猛点这里访问. 如果它的大小为0,我如何在linux中删除某个文件.我想在crontab中执行它而不需要任何额外的脚本. l filename.file | grep 5th- ...
- 给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3 ...
- ⭐算法入门⭐《堆》中等03 —— LeetCode 373. 查找和最小的K对数字
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给定两个以升序排列的整 ...
- 采用链接分配方式进行外存分配时,可采用的两种形式及其特点。假定磁盘块大小为4K,对于128G的硬盘,其文件分配表FAT需占用多少存储空间?
采用链接分配方式进行外存分配时,可采用的两种形式及其特点.假定磁盘块大小为4K,对于128G的硬盘,其文件分配表FAT需占用多少存储空间? 隐式链接:除文件的最后一个盘快外,每个盘快中都存有指向下一个 ...
最新文章
- 并行程序设计报告(MPI并行计算π,实现mandelbrot集)
- mapreduce工作流程_详解MapReduce中的五大编程模型
- android 代码混淆示例
- 检查本机显卡的cuda信息及适配cuda-sdk版本
- linux蜂鸣器驱动指令,linux蜂鸣器驱动 蜂鸣器--LINUX.doc
- select命名_Maya中Pymel写个带界面的重命名工具(一)
- 归并排序 Java实现
- Ant design的Table组件报错TypeError: rawData.some is not a function
- Maven Helper
- from collections import Counter计数器
- js实现批量下载文件
- JAVA访问控制权限
- 后台获取访问端的真实ip地址
- 同济大学计算机科学系下设几个专业,同济大学计算机科学与技术工程系简介
- Android 2.3应用开发实战
- 理解计算 从根号2到AlphaGo 第3季神经网络的数学模型
- 如何修清净心?(净空老法师法语)
- 阿里云函数计算使用教程
- 刷题回顾(持续更新)
- 我知道的风俗 和我喜欢的节日