TikTok真题第8天 | 418.屏幕可显示句子的数量、395.至少有K个重复字符的最长子串、1010.总持续时间可以被60整除的歌曲对

418.屏幕可显示句子的数量

题目链接:418.sentence-screen-fitting

解法:

这道题,看题解都很难看懂,哪怕看出点门道了,也很难用自己的话解释出来。

有几点必须清楚:

(1)将字符串列表连接成一个长字符串,每个字符串后面都加一个空格。假设这个字符串会一直循环下去,那么其实就是一个滚动数组。

(2)如果长字符串的长度为len,滚动数组的某个位置为start,那么该位置的元素为 string[start % len]。所以解法中通过 start % len 获取start这个位置在长字符串中对应的元素。

(3)定义的start,非常不好理解。我觉得可以理解为原矩阵中,新的一行的位置,在滚动数组中对应的位置。比如第一个f,在原矩阵中应该是下标为6的(对矩阵展开,从0开始计下标),但在滚动数组中是7。题解中,通过 ++ 或者 -- 的操作,是为了得到滚动数组中对应的位置。

(4)移动start时两种情况需要处理一下:1) 一行的开头刚好是space,start指针直接+1,即原矩阵remove一个space,而滚动数组中保留这个space,所以start+1。注意,明明是消除space,反而还要加1,因为滚动数组中保留了这个space;2)一行的开头刚好是一个word的中间,如果前一个为空格,则start不变,如果不为空格,则start需要减1。即start需要退回到该word的开头,在上一行增加一些space。

参考题解:https://medium.com/@rebeccahezhang/leetcode-418-sentence-screen-fitting-9d6258ce116e

[LC 418]. Sentence Screen Fitting – BlurryJam, life is a game

边界条件:无

时间复杂度:O(row * col)

空间复杂度:O(length),length为长字符串的长度。

class Solution {
public:int wordsTyping(vector<string>& sentence, int rows, int cols) {string str;for (const auto& s: sentence) {str += s + ' ';}int len = str.size();int start = 0;for (int i=0; i<rows; i++) {start += cols;if (str[start % len]==' ') {start++;} else {while (start > 0 && str[(start-1) % len]!=' ') {start--;}}}return start / len;}
};

395.至少有K个重复字符的最长子串

题目链接:395.longest-substring-with-at-least-k-repeating-characters

解法:

一种解法是滑动窗口,看评论区说挺难滑的,比较复杂,这次就跳过了。

参考的是递归的实现思路。

(1)递归的终止条件:如果字符串 s的长度少于 k,那么一定不存在满足题意的子字符串,返回 0;

(2)递归内部实现:如果一个字符 c 在 s 中出现的次数少于 k次,那么 s中所有的包含 c 的子字符串都不能满足题意。所以,应该在 s 的所有不包含 c的子字符串中继续寻找结果:把 s 按照 c 分割,得到很多子字符串 t;下一步要求 t作为源字符串的时候,它的最长的满足题意的子字符串长度,这就是递归子问题了。一旦找到一个这样的t,就会一直递归下去,直到返回结果。

(3)如果 s 中的每个字符出现的次数都大于 k 次,那么 s 就是我们要求的字符串,直接返回该字符串的长度。

参考题解:递归

边界条件:无

时间复杂度:O(N∗26∗26),因为函数最多执行 26 次,for循环遍历一次是26个字符,循环里面对 s分割时间复杂度是O(N)。
空间复杂度:O(26∗26),函数最多执行 26 次,每次最多开辟26的map空间。

class Solution {
public:int longestSubstring(string s, int k) {if(s.size() < k) return 0;unordered_map<char, int> counter;for (char c: s) {counter[c]++;}for (const auto&pair: counter) {char c = pair.first;int count = pair.second;if (count < k) {// 注意res的位置int res = 0;size_t start = 0;size_t pos = s.find(c, start);string sub;// 用来实现split的效果,string:npos表示没找到while (pos != string::npos) {sub = s.substr(start, pos-start);res = max(res, longestSubstring(sub,k));start = pos+1;pos = s.find(c, start);}sub = s.substr(start);res = max(res,longestSubstring(sub,k));return res;}}return s.size();}
};

1010.总持续时间可以被60整除的歌曲对

题目链接:1010.pairs-of-songs-with-total-durations-divisible-by-60

解法:

和两数之和类似,区别在于两数之和中,存储的是 当前的num,寻找的是target-num,而这里存储的是当前time的模,寻找的是模和当前的模可以相加为target(60)的数。

当前time的模为 time % 60,对应的数的模为:60 - time % 60,比如time=62,那么对应的数可以是58,118,模=60 - 62 % 60 = 58。这是 time 不为60的倍数的情况。

一种特殊情况是time=60,120,etc。这种情况下 time % 60 = 0, 而上面的公式 60 - 60 % 60 = 60,不满足要求,所以改为 (60 - time % 60) % 60。

而(60 - time % 60) % 60在time不为60的情况下,等价于60 - time % 60,于是一般情况和特殊情况都统一为了:(60 - time % 60) % 60

参考题解:借鉴两数之和

边界条件:无

时间复杂度:O(n)

空间复杂度:O(60)

class Solution {
public:int numPairsDivisibleBy60(vector<int>& time) {int res = 0;vector<int> cnt(60);for (int t: time) {// 注意这两行代码的顺序res += cnt[(60 - t % 60) % 60];cnt[t % 60]++;}return res;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

计算机网络——应用层与网络安全(六)

前言&#xff1a; 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解&#xff0c;下面让我们对它的最顶层&#xff0c;应用层进行一个简单的学习与认识&#xff0c;由于计算机网络多样的连接形式、不均匀的终端分布&#xff0c;以及网络的开放性和互联性等特征&…

L1-069:胎压监测

题目描述 小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#xff0c;随时监测四轮的…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用&#xff08;示例&#xff09; 2、视图的同义词使用&#xff08;示例&#xff09; 3、函数的同义词使用&am…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

Vue3+ElementPlus: 给点击按钮添加触发提示

一、需求 在Vue3项目中&#xff0c;有一个下载按钮&#xff0c;当鼠标悬浮在按钮上面时&#xff0c;会出现文字提示用户可以点击按钮进行数据的下载技术栈 Vue3 ElementPlusTooltip组件 ElementPlus中的Tooltip组件 &#xff0c;可用于展示鼠标 hover 时的提示信息 二、实现…

【SD】IP-Adapter 进阶 - 垫图 【1】

目录 关于SD1.5的画风迁移 修改动作-方法一&#xff1a;提示词 修改动作-方法二&#xff1a;openpose 关于SD1.5的画风迁移 1.5测试模型&#xff1a;flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 测试图&#xff1a; 文生图&#xff1a;best quality,masterpiece, co…

GPT-5、开源、更强的ChatGPT!

年终岁尾&#xff0c;正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布&#xff0c;AGI&#xff08;稍晚一些&#xff09;、GPT-5、更好的语音模型、更高的费率限制&#xff1b; 更好的GPTs&#xff1b;更好的推理…

weblogic未授权命令执行漏洞(CVE-2020-14882)

漏洞描述&#xff1a; 未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求&#xff0c;利用该漏洞在受影响的 weblogic Server 上执行任意代码。 复现过程&#xff1a; 1.访问ip&#xff1a;port/console 2.poc构造 #!/usr/bin/env python3 # -*- coding: utf-8 -*-…

春款来啦~我先冲了

这款假两件设计的连帽风衣外套 宽松版型对身材包容性很强&#xff0c;韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳&#xff0c;想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节&#xff0c;防风保暖 这件风衣也很好搭配&#xff0c;很经典…

css原子化的框架Tailwindcss的使用教程(原始html和vue项目的安装与配置)

安装教程 中文官网教程 原始的HTML里面使用 新建文件夹npm init -y 初始化项目 安装相关依赖 npm install -D tailwindcss postcss-cli autoprefixer初始化两个文件 npx tailwindcss init -p根目录下新建src/style.css tailwind base; tailwind components; tailwind ut…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢&#xff1f;过程真的是超级简单。 明白了原理以后&#xff0c;把零碎的知识点填充进去就可以了。所以在学习的过程中&#xff0c;不管学什么&#xff0c;我一直都强调的是要循序渐进&#xff0c;和明白原理和逻辑。这篇文章就来介绍一下如何利用…

【数据结构】图论与并查集

一、并查集 1.原理 简单的讲并查集&#xff0c;就是查询两个个元素&#xff0c;是否在一个集合当中&#xff0c;这里的集合用树的形式进行表示。并查集的本质就是森林, 即多棵树。 我们再来简单的举个例子: 假设此时的你是大一新生&#xff0c;刚进入大学&#xff0c;肯定是…

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…

Oracle中null值和空字符串的坑

思考 今天在学习oracle数据库的过程中&#xff0c;发现当对字段进行约束&#xff0c;默认空字符串时&#xff0c;出现报错 --创建employees表 CREATE TABLE employees (id NUMBER,name VARCHAR2(100) ); --对表新增email列&#xff0c;添加约束默认空字符串并且非空 ALTER …

山景32位蓝牙DSP音频应用处理芯片—BP1048B2

由工采网代理的BP1048B2是山景推出的一款高性能32位DSP蓝牙音频应用处理器&#xff1b;该芯片拥有32位RISC内核&#xff0c;支持DSP指令&#xff0c;集成FPU支持浮点运算&#xff0c;可应用于蓝牙K歌宝、蓝牙便携式音箱、蓝牙拖箱、蓝牙SoundBar、包头式蓝牙耳机、各类蓝牙音频…

阿里云PolarDB数据库费用价格表

阿里云数据库PolarDB租用价格表&#xff0c;云数据库PolarDB MySQL版2核4GB&#xff08;通用&#xff09;、2个节点、60 GB存储空间55元5天&#xff0c;云数据库 PolarDB 分布式版标准版2核16G&#xff08;通用&#xff09;57.6元3天&#xff0c;阿里云百科aliyunbaike.com分享…

uniapp中uview组件库的Search 搜索 的用法

目录 基本使用 #设置输入框形状 #是否开启清除控件 #是否开启右边控件 #自定义样式 API #Props #Events 基本使用 通过placeholder参数设置占位内容通过v-model双向绑定一个变量值&#xff0c;设置初始化时搜索框的值&#xff0c;如果初始内容为空&#xff0c;那么请绑…

苹果手机微信内存不足怎么清理?分享简单的解决方法!

我们平时经常使用手机来进行各种各样的活动&#xff0c;尤其是微信&#xff0c;它已经成为了我们生活中不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;微信占用的手机内存会越来越大&#xff0c;从而导致手机出现卡顿、闪退等问题。 当出现微信存储空间不足的…

爬虫详细教程第1天

爬虫详细教程第一天 1.爬虫概述1.1什么是爬虫&#xff1f;1.2爬虫工具——Python1.3爬虫合法吗&#xff1f;1.4爬虫的矛与盾1.4.1反爬机制1.4.2反爬策略1.4.3robots.txt协议 2.爬虫使用的软件2.1使用的开发工具: 3.第一个爬虫4.web请求4.1讲解一下web请求的全部过程4.2页面渲染…