力扣周赛 —— 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.xdnf.cn/news/149128.html

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

相关文章

深入探秘:Linux内存管理与泄漏检测

目录 1. 朋友&#xff0c;了解一下Linux的内存工作原理吧&#xff01; 1.1. 这张图展示的是一个Linux进程的虚拟内存结构 2. 内存分配与回收&#xff1a;让你的程序跑得更稳健 2.1. 内存分配与内存泄漏 3. 内存泄漏检测代码分析 3.1. 预处理宏替换方法 3.2. 动态链接库挂…

2024华为杯E题成品文章已出!

E题高速公路应急车道紧急启用模型 点击链接加入群聊【2024华为杯数学建模助攻资料】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kxtS4vwn3gcv8oCYYyrqd0BvFc7tNfhV7&authKeyedQFZne%2BzvEfLEVg2v8FOm%2BWNg1V%2Fiv3H4tcE6X%2FW6lCmkhaSaZV4PwQ%2FOVPDtF%2B&…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡&#xff0c;单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线&#xff08;我买的车载的 大概40db这样子 范围广&#xff09; http://e.tb.cn/h.grCM0CQ6L…

Python Appium自动化操作抖音

1、功能介绍 使用Python和Appium给手机抖音上的同城模块自动评论&#xff0c;主要是通过模拟用户在抖音同城模块的操作&#xff0c;实现自动发送评论的功能。具体步骤如下&#xff1a; - 安装并配置好Python环境&#xff1b; - 安装Appium库&#xff0c;用于自动化操作手机应…

【CSS in Depth 2 精译_038】6.2 CSS 定位技术之:绝对定位

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09;第二章 相对单位&#xff08;已完结&#xff09;第三章 文档流与盒模型&#xff08;已完结&#xff09;第四章 Flexbox 布局&#xff08;已…

大模型深入行业,正从“星星之火”走向“燎原之势”

2024年&#xff0c;当越来越多的企业从赶大模型的潮流与炫大模型的参数规模开始转移到行业落地时&#xff0c;华为携生态伙伴用大模型深耕行业的成果俨然遍地开花。 在9月19日华为全联接大会2024大会上同期举办的华为云AI用户峰会上&#xff0c;华为云为28个创新项目颁发了“A…

应用密码学第一次作业(9.23)

一、Please briefly describe the objectives of information and network security,such as confidentiality, integrity, availability , authenticity , and accountability The objectives of information and network security include: Confidentiality: Protecting se…

快手旗下——Kolors模型部署与使用指南

以下是按照要求重写后的 Kolors 模型部署与使用指南&#xff0c;文章风格偏技术性&#xff0c;但保持简洁和易懂的特点&#xff1a; Kolors 模型部署与使用指南 一、Kolors 简介 Kolors 是由快手 Kolors 团队开发的文本到图像生成模型&#xff0c;基于大规模的潜在扩散技术。…

vue-animate-onscroll动画库(可来回触发动画)

效果展示 ①触发一次动画 触发一次 ②触发多次动画 触发多次 1.什么是vue-animate-onscroll 它是一个 Vue 插件&#xff0c;用于在滚动时触发动画效果。它可以帮助开发者在用户滚动页面时&#xff0c;逐渐展示元素&#xff0c;增强用户体验。基本用法是通过在元素上添加特定的指…

Soul APP创始人张璐团队探讨新世代婚恋观:基于兴趣爱好的“轻相亲”正逐渐流行

近年来,随着社会经济的快速发展和文化观念的不断演变,婚恋观念正在经历显著变化。为深入了解当代年轻人对婚恋的态度与趋势,Soul APP创始人张璐团队与上海大学社会学青年研究团队合作,联合发布了《2024年青年婚恋观念及趋势调查报告》(以下简称“报告”)。该报告基于Soul APP用…

qml PathView入门

PathView是一个用于在用户界面中沿着定义的路径显示和滚动项目的视图组件。它提供了丰富的定制选项&#xff0c;允许开发者创建复杂的动画效果和自定义的滚动行为&#xff0c;特别适用于需要展示非线性排列项目的场景&#xff0c;如图片轮播、自定义滚动菜单等。 一、主要属性 …

[教程]如何在iPhone上启用中国移动/联通/电信RCS消息

目前 苹果已经在 iOS 18 中带来 RCS 富媒体消息的支持&#xff0c;该消息基于网络传递&#xff0c;用户可以通过 RCS 免费将消息发送到其他 iPhone 或 Android 设备。在苹果面向测试版用户推出的 iOS 18.1 Beta 版中&#xff0c;中国网络运营商包括中国移动、中国联通、中国电信…

JavaSE - 面向对象编程05

01 正则表达式 【1】概念&#xff1a;正则表达式是由一些特定字符组成的&#xff0c;代表的是一个规则。 【2】可以用来做什么&#xff1f; ① 用于校验数据格式的合法性 ② 用于在文本中爬取满足要求的内容 ③ 用于String类的replace方法&#xff0c;split方法的替换和分割 …

【学习笔记】Linux系统基础知识3 —— cd命令详解

一、前期准备 1.已经正确安装并成功进入Linux系统 说明&#xff1a;本实验采用的 Redhat 系统&#xff08;因系统不一致&#xff0c;可能部分显示存在差异&#xff09; 二、学习内容 提示&#xff1a;学习Linux系统基础命令 cd 命令详解 1、cd命令 1. 功能说明 cd 命令用…

Simple Calculator(算法初阶,代码基础,“纯”手撕)

简单计算器&#xff1a;仅适用无括号加减乘除&#xff0c;算法初阶&#xff0c;代码基础&#xff0c;不调库或模块“纯”手撕。 (笔记模板由python脚本于2024年09月22日 12:08:02创建&#xff0c;本篇笔记适合喜欢用python解决实际问题的coder翻阅) 【学习的细节是欢悦的历程】…

Qt中多语言的操作(以QtCreator为例)

1、首先&#xff0c;我们在代码中与文本相关的且需要支持多语言的地方&#xff0c;用tr来包含多语言key&#xff08;多语言key是我们自己定义的&#xff09;&#xff0c;如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

在 deepin 上除了 Steam,还能怎么玩游戏?

查看原文 前段时间&#xff0c;很多朋友在 deepin 23 上实现了《黑神话&#xff1a;悟空》的通关&#xff0c;那么除了通过 Steam 玩 Windows 游戏之外&#xff0c;还有其他可以使用的游戏平台吗&#xff1f; 回答&#xff0c;当然是可以哒&#xff01; 游戏平台介绍 今天介…

RHCSA认证-Linux(RHel9)-Linux入门

文章目录 概要一、创建、查看和编辑⽂本1.1 输出重定向1.2 vim编辑器1.3 shell 变量1.5 获取帮助 二、管理本地用户和组2.1 描述用户2.2 切换用户和赋权2.3 用户管理2.4 用户组管理2.5 密码策略 三、控制文件访问3.1 列出文件和文件权限3.2 更改文件权限和拥有者3.3 控制默认权…

昆明理工大学MBA工商管理上课方式

--昆工MBA考研、管理与经济学院、125100工商管理、125602项目管理、199管理类综合能力、F009 政治、F008政治项目管理概论

有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习

导言 在写个值日接口时发现值日表中的值日时段是可以分多段的&#xff0c;想了想可以使用Json类型来存&#xff0c;不过之前没接触过在后端操作Json格式存到数据库的情况&#xff0c;之后学也了解到了一下方法来实现&#xff0c;故记录一下。 过程 从前端到后端再到数据库的 JS…