Leetcode 第 381 场周赛题解

Leetcode 第 381 场周赛题解

  • Leetcode 第 381 场周赛题解
    • 题目1:3014. 输入单词需要的最少按键次数 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3015. 按距离统计房屋对数目 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3016. 输入单词需要的最少按键次数 II
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3017. 按距离统计房屋对数目 II
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 381 场周赛题解

题目1:3014. 输入单词需要的最少按键次数 I

思路

题目里说了字符串 s 中只要小写字母,所以不用统计 1、#、*、0 这 4 个特殊字符的出现次数。

在这里插入图片描述

代码

// 数学class Solution
{
public:int minimumPushes(string word){// 特判if (word.empty())return 0;int n = word.length();int k = n / 8;return (k * 4 + n % 8) * (k + 1);}
};

复杂度分析

时间复杂度:O(1)。

空间复杂度:O(1)。

题目2:3015. 按距离统计房屋对数目 I

思路

暴力枚举每一个房屋对 (i, j) 的 3 种路径:

  1. i->j:长度为 len1 = j-i;
  2. i->x->y->j:长度为 len2 = abs(i - x) + 1 + abs(j - y);
  3. i->y->x->j:长度为 len3 = abs(i - y) + 1 + abs(j - x)。

取这 3 种路径的最小值作为房屋对 (i, j) 的路径,路径长度 len = min({len1, len2, len3}),因为路径是双向的,在答案数组 ans 中 ans[len - 1] += 2。

最后返回 ans 数组。

代码

/** @lc app=leetcode.cn id=3015 lang=cpp** [3015] 按距离统计房屋对数目 I*/// @lc code=start
class Solution
{
public:vector<int> countOfPairs(int n, int x, int y){vector<int> ans(n, 0);for (int i = 1; i < n; i++)for (int j = i + 1; j <= n; j++){int len1 = j - i;                       // i->jint len2 = abs(i - x) + 1 + abs(j - y); // i->x->y->jint len3 = abs(i - y) + 1 + abs(j - x); // i->y->x->j// 取最短距离作为路径int len = min({len1, len2, len3});ans[len - 1] += 2; // 路径是双向的}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2),其中 n 是房屋数量。

空间复杂度:O(n),其中 n 是房屋数量。

题目3:3016. 输入单词需要的最少按键次数 II

思路

本题与 3014. 输入单词需要的最少按键次数 I 唯一不同的点在于:

3014. 输入单词需要的最少按键次数 I 中字符串 word 所有字母互不相同,而 3016. 输入单词需要的最少按键次数 II
中字符串 word 的字符可以重复。

在这里插入图片描述

因为我们希望出现次数多的字符的点击次数尽可能少。

我们用一个哈希表 alpha 统计字符串 word 中各个字符 c 出现的次数,按降序排序。

遍历哈希表 alpha,当前下标为 i,当前字符次数为 alpha[i],它的单次点击所需次数为 i/8+1 次,因为我们只有 8 个按钮可以按。把 alpha[i] * (i / 8 + 1) 累加起来,这样得到的总按键次数最小。

代码

/** @lc app=leetcode.cn id=3016 lang=cpp** [3016] 输入单词需要的最少按键次数 II*/// @lc code=start
class Solution
{
public:int minimumPushes(string word){// 特判if (word.empty())return 0;int n = word.size();vector<int> alpha(26, 0);for (char &c : word)alpha[c - 'a']++;sort(alpha.begin(), alpha.end(), greater<int>());int ans = 0;for (int i = 0; i < 26; i++)ans += alpha[i] * (i / 8 + 1);return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是字符串 word 的长度。

空间复杂度:O(n),其中 n 是字符串 word 的长度。

题目4:3017. 按距离统计房屋对数目 II

思路

题解:两种分类讨论思路(Python/Java/C++/Go)

代码

/** @lc app=leetcode.cn id=3017 lang=cpp** [3017] 按距离统计房屋对数目 II*/// @lc code=start
class Solution
{
public:vector<long long> countOfPairs(int n, int x, int y){if (x > y){swap(x, y);}vector<int> diff(n + 1);auto add = [&](int l, int r, int v){if (l > r)return;diff[l] += v;diff[r + 1] -= v;};auto update = [&](int i, int x, int y){add(y - i, n - i, -1); // 撤销 [y,n]int dec = y - x - 1;   // 缩短的距离add(y - i - dec, n - i - dec, 1);int j = (x + y + 1) / 2 + 1;add(j - i, y - 1 - i, -1); // 撤销 [j, y-1]add(x - i + 2, x - i + y - j + 1, 1);};auto update2 = [&](int i, int x, int y){add(y - i, n - i, -1);           // 撤销 [y,n]int dec = (y - i) - (i - x + 1); // 缩短的距离add(y - i - dec, n - i - dec, 1);int j = i + (y - x + 1) / 2 + 1;add(j - i, y - 1 - i, -1); // 撤销 [j, y-1]add(i - x + 2, i - x + y - j + 1, 1);};for (int i = 1; i <= n; i++){add(1, i - 1, 1);add(1, n - i, 1);if (x + 1 >= y){continue;}if (i <= x){update(i, x, y);}else if (i >= y){update(n + 1 - i, n + 1 - y, n + 1 - x);}else if (i < (x + y) / 2){update2(i, x, y);}else if (i > (x + y + 1) / 2){update2(n + 1 - i, n + 1 - y, n + 1 - x);}}vector<long long> ans(n);long long sum_d = 0;for (int i = 0; i < n; i++){sum_d += diff[i + 1];ans[i] = sum_d;}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是房屋数量。

空间复杂度:O(n),其中 n 是房屋数量。

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

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

相关文章

HarmonyOS使用Web组件加载页面

1、加载网络页面 在Web组件创建时&#xff0c;指定默认加载的网络页面 。在默认页面加载完成后&#xff0c;如果开发者需要变更此Web组件显示的网络页面&#xff0c;可以通过调用loadUrl()接口加载指定的网页。 默认在Web组件加载完“www.baidu.com”页面后&#xff0c;点击按…

html+js+css静态故宫主题

登录代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>登录 - 故宫博物院</title><…

C语言菜鸟入门·函数

目录 1. 函数的定义 2. 函数声明 3. 函数调用 4. 函数参数 4.1 传值调用 4.2 引用调用 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同…

【C++】C++入门—— 引用

引用 1 前情提要2 概念剖析3 引用特性4 常引用5 使用场景5.1做参数5.2 做返回值 6 传值 传引用的效率比较7 引用与指针的差异Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见 1 前情提要 在C语言中&#xff0c;我们往往会遇见复杂的指针&#xff08;如…

论文阅读-MapReduce

论文名称&#xff1a;MapReduce: Simplified Data Processing on Large Clusters 翻译的效果不是很好&#xff0c;有空再看一遍&#xff0c;参照一下别人翻译的。 MapReduce:Simplified Data Processing on Large Clusters 中文翻译版(转) - 阿洒 - 博客园 (cnblogs.com) 概…

C#,欧拉数(Eulerian Number)的算法与源代码

1 欧拉数 欧拉数特指 Eulerian Number&#xff0c;不同于 Euler numbers&#xff0c;Eulers number 哦。 组合数学中&#xff0c;欧拉数&#xff08;Eulerian Number&#xff09;是从1到n中正好满足m个元素大于前一个元素&#xff08;具有m个“上升”的排列&#xff09;条件的…

mini-spring 实现应用上下文,自动识别、资源加载、扩展机制

我们不能让面向 Spring 本身开发的 DefaultListableBeanFactory 服务&#xff0c;直接给予用户使用 DefaultListableBeanFactory、XmlBeanDefinitionReader&#xff0c;是我们在目前 Spring 框架中对于服务功能测试的使用方式&#xff0c;它能很好的体现出 Spring 是如何对 xm…

【靶场实战】Pikachu靶场暴力破解关卡详解

Nx01 系统介绍 Pikachu是一个带有漏洞的Web应用系统&#xff0c;在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习&#xff0c;那么Pikachu可能正合你意。 Nx02 Burte Force概述 “暴力破解”是一攻击具手段&#xff0c;在web…

Transformer 自然语言处理(二)

原文&#xff1a;Natural Language Processing with Transformers 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;文本生成 基于 Transformer 的语言模型最令人不安的特点之一是它们生成的文本几乎无法与人类写的文本区分开。一个著名的例子是 Ope…

60、Flink CDC 入门介绍及Streaming ELT示例(同步Mysql数据库数据到Elasticsearch)-完整版

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

【Docker】在Windows下使用Docker Desktop创建nginx容器并访问默认网站

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

布局技巧及CSS初始化

一&#xff0c;margin负值巧妙应用 二&#xff0c;文字围绕浮动元素 三&#xff0c;行内块 四&#xff0c;CSS三角强化 五&#xff0c;CSS初始化 一&#xff0c;margin负值巧妙应用 制作盒子的细线边框&#xff1a; 鼠标经过li后变色&#xff1a; 二&#xff0c;文字围绕…

Redis缓存穿透、缓存击穿、缓存雪崩的解决方案

一、背景 不管是实际工作还是面试&#xff0c;这3个问题都是非常常见的&#xff0c;今天我们就好好探讨一下这个三个问题的解决方案 三者的区别&#xff1a; 缓存穿透&#xff1a;查询缓存和数据库都不存在的数据&#xff0c;缓存没有&#xff0c;数据库也没有 缓存击穿&#…

Java入门高频考查基础知识8(腾讯18问1.5万字参考答案)

刷题专栏&#xff1a;http://t.csdnimg.cn/gvB6r Java 是一种广泛使用的面向对象编程语言&#xff0c;在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性&#xff0c;适用于多种应用场景&#xff0c;包括企业应用、移动应用、嵌入式系统等。 以下是几个面试技巧&…

使用AKStream对接gb28181

优点&#xff1a;功能比较多&#xff0c;C#开发的&#xff0c;容易修改&#xff0c;内嵌入了zlmk流媒体服务品&#xff0c;启动简单 缺点&#xff1a;sip对摄像头兼容还有问题&#xff0c;大华接入非常不稳定&#xff0c;注册等待时间久&#xff0c;对海康是正常&#xff0c;占…

IntelliJ Idea实用插件推荐

目录 一、插件安装 二、常用插件 A、代码规范 Alibaba Java Coding Guidelines SonarLint B、快捷开发 aiXcoder-AI代码生成 AWS Toolkit-AI代码生成 CodeGeeX-AI代码生成 CodeGlance-代码缩略图 camelCase-格式转换 GsonFormatPlus-json代码生成 Sequence Giagram…

UE4 CustomDepthMobile流程小记

原生UE opaque材质中获取CustomDepth/CustomStencil会报错 在其Compile中调用的函数中没有看到报错逻辑 材质节点的逻辑都没有什么问题&#xff0c;所以看一下报错 在HLSLMaterialTranslator::Translate中 修改之后 mobile流程的不透明材质可以直接获取SceneTexture::customd…

聚焦AI新动能,九州未来与燧弘华创签约!

1月24日&#xff0c;厦门市电子信息与人工智能产业高质量发展大会成功举办。来自电子信息产业、人工智能领域的企业家、专家等近300位嘉宾齐聚一堂&#xff0c;共谋智能基础&#xff0c;共话产业合作&#xff0c;共享发展商机。 会上&#xff0c;九州未来与燧弘华创签署算力租…

anaconda离线安装包的方法

当设备没有网络时&#xff0c;可以使用有网络的设备先下载所需安装包&#xff0c;然后离线拷贝到需要安装的设备&#xff0c;最后安装。 一. 下载所需安装包 下载命令&#xff1a;使用pip download。详细描述参见pip download -h 以"blind-watermark"为例。 pip …

​学者观察 | 区块链技术理论研究与实践观察——中央财经大学朱建明

导语 当下区块链研究成果质量越来越高&#xff0c;技术应用越来越成熟。在现阶段的研究中存在哪些短板需要弥补&#xff0c;如何将研究成果转化为推动数字经济高质量发展的实际应用&#xff0c;区块链技术与其他新技术结合发展将带来哪些新的机遇&#xff1f; 中央财经大学朱…