力扣周赛 —— 416

前言

只做出了第一道,第二第三道都超时。
痛,太痛了。
在这里插入图片描述

题目

Q1.举报垃圾信息

给你一个字符串数组 message 和一个字符串数组 bannedWords。
如果数组中 至少 存在两个单词与 bannedWords 中的任一单词 完全相同,则该数组被视为 垃圾信息。
如果数组 message 是垃圾信息,则返回 true;否则返回 false。
示例1:
输入: message = [“hello”,“world”,“leetcode”], bannedWords = [“world”,“hello”]
输出: true
解释:
数组 message 中的 “hello” 和 “world” 都出现在数组 bannedWords 中。

解题思路
哈希

利用哈希表存储 banneWords 中的 key,扫描 message ,统计 key 出现的次数,大于等于2返回 true,小于2返回 fase。

时间复杂度:O(m+n)

func reportSpam(message []string, bannedWords []string) bool {hash := map[string]bool{}for _, word := range bannedWords {hash[word] = true}count := 0for _, s := range message {if _, ok := hash[s]; ok {count++}if count >= 2 {return true}}return false
}

Q2. 移山所需的最少秒数

给你一个整数 mountainHeight 表示山的高度。
同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。
工人们需要 同时 进行工作以 降低 山的高度。对于工人 i :

  • 山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + … + workerTimes[i] * x 秒。例如:
    • 山的高度降低 1,需要workerTimes[i] 秒。
    • 山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2秒,依此类推。

返回一个整数,表示工人们使山的高度降低到 0 所需的 最少 秒数。
示例 1:
输入: mountainHeight = 4, workerTimes = [2,1,1]
输出: 3
解释:
将山的高度降低到 0 的一种方式是:
工人 0 将高度降低 1,花费 workerTimes[0] = 2 秒。
工人 1 将高度降低 2,花费 workerTimes[1] + workerTimes[1] * 2 = 3 秒。
工人 2 将高度降低 1,花费 workerTimes[2] = 1 秒。
因为工人同时工作,所需的最少时间为 max(2, 3, 1) = 3 秒

解题思路
贪心

每次花最少的时间让山高度降低1。

我们可以维持一个降低山的高度的最小成本的切片。每次从切片头部取出最小的时间,对齐进行处理,并重排序。

时间复杂度:O(nlogn + n m n^m nm) 。n 为 workerTimes 长度,m 为 mountainHeight 。

type Node struct {cur   intval   intcount int
}func minNumberOfSeconds(mountainHeight int, workerTimes []int) int64 {arr := make([]Node, len(workerTimes))for i, work := range workerTimes {arr[i].val = workarr[i].cur = workarr[i].count = 2}sort.Slice(arr, func(i, j int) bool {return arr[i].cur < arr[j].cur})ans := 0for mountainHeight > 0 {ans = max(ans, arr[0].cur)arr[0].cur += arr[0].val * arr[0].countarr[0].count++mountainHeight--for i := 0; i < len(arr)-1; i++ {if arr[i].cur > arr[i+1].cur {arr[i], arr[i+1] = arr[i+1], arr[i]}}}return int64(ans)
}

提交,运行,超时。通过测试用例:556 / 571

在这里插入图片描述

二分法

因为所有人都在同时工作,那么我们只需要找出所有人同时工作使山的高度降低到 0 所需要的最小秒数

如何查找?通过二分查找,否则会超时。

令 t = workerTimes[i],求 m s内能降低山的最大高度。设 x 为最大高度。

则 t + 2 * t + … + x * t = t ∗ ( 1 + x ) ∗ x 2 \frac{t * (1 + x)*x}{2} 2t(1+x)x <= m

由求根公示得正根为:x = 1 + 8 ∗ m t − 1 2 \frac{\sqrt{1 + 8 * \frac{m}{t}}-1}{2} 21+8tm 1

func minNumberOfSeconds(mountainHeight int, workerTimes []int) int64 {l := 1r := int(1e16) // 需要比所有的测试用例输出大。有个测试点的数据为 5e15ans := math.MaxIntfor l < r {mid := (l + r) / 2sumHeight := 0for _, time := range workerTimes {sumHeight += int(math.Sqrt(1.0/4.0+float64(float64(2*mid)/float64(time))) - 0.5)}if sumHeight >= mountainHeight {ans = min(ans, mid)r = mid} else {l = mid + 1}}return int64(ans)
}

Q3. 统计重新排列后包含另一个字符串的字符串数目 I

Q3、Q4题目是一样的,不过Q4的数据量更大。

给你两个字符串 word1 和 word2 。
如果一个字符串 x 重新排列后,word2 是重排字符串的前缀 ,那么我们称字符串 x 是合法的 。
请你返回 word1中合法子字符串的数目。

示例

输入:word1 = “bcca”, word2 = “abc”
输出:1
解释:
唯一合法的子字符串是 “bcca” ,可以重新排列得到 “abcc” ,“abc” 是它的前缀。

解释

  • 1 <= word1.length <= 1 0 5 {10^5} 105
  • 1 <= word2.length <= 1 0 4 {10^4} 104
  • word1 和 word2 都只包含小写英文字母。
解题思路

看的灵神的题解。

滑动窗口

由于子串可以重排,只要子串可以涵盖 word2,那么子串就可以通过重排,使得 word2 是字串的前缀。
固定右边界,移动左边界,找出涵盖 wrod2 的最大左边界。
满足条件的个数为:left 个。
在这里插入图片描述

对比 word1 是否涵盖 word2 可以通过一个数组实现,数组记录 word2word1 的字幕出现次数之差。在 word2 中出现的字母 +1, 在 word1 中出现的字母 -1。另外通过一个 less 参数记录窗口内有多少个字母的出现次数比 word2 的小。这样当 less = 0时,即 word1 涵盖 word2

func validSubstringCount(word1 string, word2 string) int64 {cnt := [26]int{} // word2 与 word1 的字母出现次数之差for _, c := range word2 {cnt[c-'a']++}less := 0	// 统计窗口内有多少个字母的出现次数比 t 的小for _, v := range cnt {if v > 0 {less++}}ans := 0left := 0for _, b := range word1 {cnt[b-'a']--if cnt[b-'a'] == 0 {less--}for less == 0 {cnt[word1[left]]++if cnt[word1[left]] > 0 {less++}left++}ans += left}return int64(ans)
}

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

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

相关文章

HTML讲解(三)通用部分

目录 1.空格标记 2.特殊文字的标记 3.注释语句 4.对文字字体的设置 5.修改文字形态 6.换行标记 7.居中标记 8.水平线标记 9.设置滚动弹幕 1.空格标记 在HTML中&#xff0c;我们想打印空格并不能直接敲一个空格键&#xff0c;因为如果是敲空格键&#xff0c;那无论你敲…

【已解决】ElementPlus 的 el-menu 组件如何用 js 控制展开某个子菜单,并在其他组件中控制使用呢?

文章目录 需求几次探索官网寻找线索&#xff08;解决办法&#xff09; 需求 我如何用代码来实现 ElementPlus 的菜单的展开和收缩呢&#xff1f; 几次探索 尝试通过找到节点之后&#xff0c;使用 click 事件&#xff0c;失败了 // 伪代码如下 const handleFindNodeAndClick …

vue Echart使用

一、在vue中使用Echarts 1.安装Echarts npm install echarts --save2.准备一个呈现图表的盒子 给盒子起名字是建议使用id选择器 这个盒子通常来说就是我们熟悉的 div &#xff0c;这个 div 决定了图表显示在哪里&#xff0c;盒子一定要指定宽和高 <div id"main&quo…

Scott Brinker:营销运营这一角色很棒可能会变得更棒;以下是关于相关职位的最新数据

营销运营职位晋升频繁 如果你在市场营销部门工作&#xff0c;生活可能相当不错。74%的营销人员表示&#xff0c;他们对自己的角色有些满意或非常满意。在过去的一年里&#xff0c;超过一半的人得到了晋升或找到了新工作。平均而言&#xff0c;他们的薪水比组织中其他类型的营销…

二、八、十、十六进制的相互转换(期末考试必备)

本文中写的计算方法和计算流程不一定就是正确规范的。。。 参考&#xff0c;仅供参考&#xff0c;如果有问题欢迎指出 目录 一、二进制 1.1 【二】进制转换【十】进制 1.2 【二】进制转换【八】进制 1.3 【二】进制转换【十六】进制 二、八进制 2.1 【八进制】转【二进…

Vue学习记录之八(局部组件,全局组件,递归组件,动态组件)

一、局部组件 在src\components\Card.vue 建立一个文件&#xff0c;代码如下&#xff1a; <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section>&…

【HTML5】html5开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【标准库的典型内容】std::declval

一、 d e c l v a l declval declval的基本概念和常规范例 s t d : : d e c l v a l std::declval std::declval 是 C 11 C11 C11标准中出现的一个函数模板。这个函数模板设计的比较奇怪&#xff08;没有实现&#xff0c;只有声明&#xff09;&#xff0c;因此无法被调用&…

Android15之编译Cuttlefish模拟器(二百三十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs&#xff0c;但它计算并存储协方差矩阵导数的最小特征值&…

MovieLife 电影生活

MovieLife 电影生活 今天看到一个很有意思的项目&#xff1a;https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常&#xff0c;这类想法只是一闪而过&#xff0c;很少会付诸实践。但这次有所不同。假如你的生活是一部电影&#xff0c…

vi | vim基本使用

vim三模式&#xff1a;① 输入模式 ②命令模式 ③末行模式&#xff08;编辑模式&#xff09; vim四模式&#xff1a;① 输入模式 ②命令模式 ③末行模式&#xff08;编辑模式&#xff09; ④V模式 一、命令模式进入输入模式方法&#xff1a; 二、命令模式基…

影刀RPA实战:java结合影刀同步采购订单数据

1.实战目标 本次实战我们用java语言结合影刀&#xff0c;实现从自用ERP系统同步订单到旺店通中&#xff0c;在工作中&#xff0c;有时候我们的运营数据不是直接在旺店通ERP中操作&#xff0c;比如我们有自己的ERP&#xff0c;完成一些特定的内部工作后&#xff0c;再把数据同步…

Rustrover2024.2 正式发布:个人非商用免费,泰裤辣

如果这个世界本身 已经足够荒唐 那究竟什么才能算是疯狂 爱情就是这样 一旦错过了 就会有另一个人代替 我们知道 jetbrains 在今年的早些时候正式为 rust 语言发布了专用的 IDE &#xff0c;也就是 rustrover。如今 rustrover 也正式跻身为 jetbrains IDE 系列的一员猛将。…

Python | Leetcode Python题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; class Solution:def characterReplacement(self, s: str, k: int) -> int:num [0] * 26n len(s)maxn left right 0while right < n:num[ord(s[right]) - ord("A")] 1maxn max(maxn, num[ord(s[right]) - ord("…

Linux学习笔记13---GPIO 中断实验

中断系统是一个处理器重要的组成部分&#xff0c;中断系统极大的提高了 CPU 的执行效率&#xff0c;本章会将 I.MX6U 的一个 IO 作为输入中断&#xff0c;借此来讲解如何对 I.MX6U 的中断系统进行编程。 GIC 控制器简介 1、GIC 控制器总览 I.MX6U(Cortex-A)的中断控制器…

科研绘图系列:R语言堆积图(stacked barplot)

文章目录 介绍加载R包导入数据数据预处理画图导出数据系统信息介绍 微生物堆积图是一种数据可视化工具,通常用于展示微生物群落中不同物种的相对丰度。这种图表通过将每个样本中的微生物按照其分类学等级(如门、属等)进行分类,并以不同颜色的块状图表示,每个块的大小代表…

信息安全工程师(13)网络攻击一般过程

前言 网络攻击的一般过程是一个复杂且系统化的行为&#xff0c;其目标往往在于未经授权地访问、破坏或窃取目标系统的信息。 一、侦查与信息收集阶段 开放源情报收集&#xff1a;攻击者首先会通过搜索引擎、社交媒体、论坛等公开渠道获取目标的基本信息&#xff0c;如姓名、地址…

科研小白入门工具

三、科研绘图 1.流程图绘制工具&#xff1a;powerpoint、亿图图示、visio、draw.io 2.绘制标准&#xff1a;布局合理、色彩鲜明、字体大小、矢量输出 矢量图绘制推荐流程&#xff1a;亿图图示绘制--visio--word--pdf无损放大 3.文章插图&#xff1a;excel、origin、matlab、…

Linux——虚拟机网络配置

进行虚拟机网络配置是确保虚拟机能够正常访问网络、与宿主机及其他设备进行通信的关键步骤。虚拟机网络配置允许用户根据实际需求选择合适的网络模式&#xff0c;并调整网络参数以满足特定的网络环境要求。 虚拟机常见的三种网络模式包括桥接模式、NAT模式和主机模式&#xff…