leetcode解题思路分析(一百六十三)1409 - 1415 题

  1. 查询带键的排列
    给定一个正整数数组 queries ,其取值范围在 1 到 m 之间。 请你根据以下规则按顺序处理所有 queries[i](从 i=0 到 i=queries.length-1):
    首先,你有一个排列 P=[1,2,3,…,m]。
    对于当前的 i ,找到 queries[i] 在排列 P 中的位置(从 0 开始索引),然后将它移到排列 P 的开头(即下标为 0 处)。注意, queries[i] 的查询结果是 queries[i] 在 P 中移动前的位置。
    返回一个数组,包含从给定 queries 中查询到的结果。

按规则匹配替换即可。

class Solution {
public:using EntityChar = pair <string, char>;vector <EntityChar> entityList;string entityParser(string text) {entityList = vector({(EntityChar){"&quot;", '"'},(EntityChar){"&apos;", '\''},(EntityChar){"&amp;", '&'},(EntityChar){"&gt;", '>'},(EntityChar){"&lt;", '<'},(EntityChar){"&frasl;", '/'}});string r = "";for (int pos = 0; pos < text.size(); ) {bool isEntity = false;if (text[pos] == '&') {for (const auto &[e, c]: entityList) {if (text.substr(pos, e.size()) == e) {r.push_back(c);pos += e.size();isEntity = true;break;}}}if (!isEntity) {r.push_back(text[pos++]);continue;}}return r;}
};
  1. 给 N x 3 网格图涂色的方案数
    你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。给你网格图的行数 n 。请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。

规律推导:每一行只可能是ABC或者ABA这两种形式,因此,我们可以推导递推公式,最后根据公式解题。

class Solution {
private:static constexpr int mod = 1000000007;public:int numOfWays(int n) {int fi0 = 6, fi1 = 6;for (int i = 2; i <= n; ++i) {int new_fi0 = (2LL * fi0 + 2LL * fi1) % mod;int new_fi1 = (2LL * fi0 + 3LL * fi1) % mod;fi0 = new_fi0;fi1 = new_fi1;}return (fi0 + fi1) % mod;}
};
  1. 逐步求和得到正数的最小值
    给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。

题目读起来很拗口,实际就是求前缀和,如果有小于0的情况出现,则加一个Offset,否则返回1.

class Solution {
public:int minStartValue(vector<int>& nums) {int min_prefix = INT_MAX;int prefix = 0;for (auto n : nums) {prefix += n;if (prefix < 0)min_prefix = std::min(prefix, min_prefix);}return min_prefix < 0? 1 - min_prefix : 1;}
};
  1. 和为 K 的最少斐波那契数字数目
    给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。
    斐波那契数字定义为:
    F1 = 1
    F2 = 1
    Fn = Fn-1 + Fn-2 , 其中 n > 2 。
    数据保证对于给定的 k ,一定能找到可行解。

贪心算法解题。先把小于等于k的数全列出来,然后从大到小减。

class Solution {
public:int findMinFibonacciNumbers(int k) {vector<int> f;f.emplace_back(1);int a = 1, b = 1;while (a + b <= k) {int c = a + b;f.emplace_back(c);a = b;b = c;}int ans = 0;for (int i = f.size() - 1; i >= 0 && k > 0; i--) {int num = f[i];if (k >= num) {k -= num;ans++;}}return ans;}
};
  1. 长度为 n 的开心字符串中字典序第 k 小的字符串
    一个 「开心字符串」定义为:
    仅包含小写字母 [‘a’, ‘b’, ‘c’].
    对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。
    比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “ababbc” 都不是开心字符串。
    给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。
    请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回 空字符串 。

因为只用返回第k个,所以计算每个字母开头代表的全排列数,就可以一步一步找到目标点。

class Solution {
public:char abc[3] = {'a', 'b', 'c'};char ch[3][2] = {{'b', 'c'}, {'a', 'c'}, {'a', 'b'}};int state[3][2] = {{1, 2}, {0, 2}, {0, 1}};string getHappyString(int n, int k) {if (k > (int)pow(2, n - 1) * 3) return "";string ans;k--;int p = k / (int)pow(2, n - 1);k %= (int)pow(2, n - 1);ans.push_back(abc[p]);for (int i = n - 1; i > 0; --i) {int tmp = (int)pow(2, i - 1);ans.push_back(ch[p][k / tmp]);p = state[p][k / tmp];k %= tmp;}return ans;}
};
  1. 恢复数组
    某个程序本来应该输出一个整数数组。但是这个程序忘记输出空格了以致输出了一个数字字符串,我们所知道的信息只有:数组中所有整数都在 [1, k] 之间,且数组中的数字都没有前导 0 。给你字符串 s 和整数 k 。可能会有多种不同的数组恢复结果。按照上述程序,请你返回所有可能输出字符串 s 的数组方案数。由于数组方案数可能会很大,请你返回它对 10^9 + 7 取余 后的结果。

递推暴力求解

using LL = long long;class Solution {
private:static constexpr int mod = 1000000007;public:int numberOfArrays(string s, int k) {int n = s.size();// 为了便于代码编写,我们使用 64 位整数类型LL kll = k;vector<int> f(n + 1, 0);// 递推的边界条件f[0] = 1;for (int i = 1; i <= n; ++i) {LL num = 0, base = 1;// 倒序枚举 j,最多只需要枚举 10 个for (int j = i - 1; j >= 0 && i - j <= 10; --j) {// 在高位添加当前的数字,得到第 j+1 到 i 个数字组成的数// 注意 s 的下标是从 0 开始的num += (s[j] - '0') * base;if (num > kll) {break;}// 判断是否有前导 0if (s[j] != '0') {f[i] += f[j];f[i] %= mod;}base *= 10;}}return f[n];}
};
  1. 重新格式化字符串
    给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母.请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。

先遍历一遍取数字和字母的个数,相减绝对值小于等于一才能满足题意。然后将多的插在偶数位,少的插在奇数位即可。

class Solution {
public:string reformat(string s) {int sum_digit = 0;for (auto& c : s) {if (isdigit(c)) {sum_digit++;}}int sum_alpha = s.size() - sum_digit;if (abs(sum_digit - sum_alpha) > 1) {return "";}bool flag = sum_digit > sum_alpha;for (int i = 0, j = 1; i < s.size(); i += 2) {if (isdigit(s[i]) != flag) {while (isdigit(s[j]) != flag) {j += 2;}swap(s[i], s[j]);}}return s;}
};

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

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

相关文章

【自学笔记】GitHub的重点知识点-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 GitHub使用指南详细知识点一、GitHub基础与账户管理1. GitHub简介2. 创建与管理GitHub账户3. 创建与配置仓库&#xff08;Repository&#xff09; 二、Git基础与Git…

vscode软件操作界面UI布局@各个功能区域划分及其名称称呼

文章目录 abstract检查用户界面的主要区域官方文档关于UI的介绍 abstract 检查 Visual Studio Code 用户界面 - Training | Microsoft Learn 本质上&#xff0c;Visual Studio Code 是一个代码编辑器&#xff0c;其用户界面和布局与许多其他代码编辑器相似。 界面左侧是用于访…

类和对象(下)——类型转化 static成员 内部类 匿名对象 拷贝对象优化

一、类型转换 1.1 类型转化特点 C支持内置类型隐式类型转换为类类型对象&#xff0c;需要有相关内置类型为参数的构造函数。构造函数前面加explicit就不再支持隐式类型转换。类类型的对象之间也可以隐式转换&#xff0c;需要相应的构造函数支持 内置类型转换为类类型对象&#…

基于场景图的零样本目标导航

参考论文&#xff1a;SG-Nav&#xff1a;Online 3D Scene Graph Prompting for LLM-based Zero-shot Object Navigation 0 前言 基于现成的视觉基础模型VFMs和大语言模型LLM构建了无需任何训练的零样本物体巡航框架SG-Nav。 通过VLMs将机器人对场景的观测构建为在线的3D场景图…

深入解析 clone():高效的进程与线程创建方法(中英双语)

深入解析 clone()&#xff1a;高效的进程与线程创建方法 1. 引言 在 Unix/Linux 系统中&#xff0c;传统的进程创建方式是 fork()&#xff0c;它会复制父进程的地址空间来创建子进程。然而&#xff0c;fork() 复制的资源往往会被 exec() 立即替换&#xff0c;这会导致额外的内…

开屏广告-跳过神器

给大家介绍一款超实用的软件——SKIP&#xff0c;它堪称李跳跳的最佳平替&#xff01;这款软件已经在Github开源免费&#xff0c;完全无需担心内置源问题&#xff0c;也无需导入任何规则。安装完成后&#xff0c;即可直接使用&#xff0c;非常便捷&#xff01; 首次打开软件时…

大模型本地化部署(Ollama + Open-WebUI)

文章目录 环境准备下载Ollama模型下载下载Open-WebUI 本地化部署的Web图形化界面本地模型联网查询安装 Docker安装 SearXNG本地模型联网查询 环境准备 下载Ollama 下载地址&#xff1a;Ollama网址 安装完成后&#xff0c;命令行里执行命令 ollama -v查看是否安装成功。安装成…

自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)

开源地址:VMwork 要使终端不弹出&#xff0c; #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") 还要实现jmp near 0x01类似的 本次的main.cpp #include <graphics.h> #include <conio.h> #include <windows.h> #includ…

排序算法--桶排序

核心思想为分区间排序后合并。适用于数据均匀分布在一个范围内&#xff0c;或浮点数排序或范围明确的数据。如果需要处理整数或其他数据范围&#xff0c;可以通过调整BUCKET_RANGE的计算方式实现&#xff0c;例如对[0,100)的整数排序&#xff1a; int index arr[i] / 10; // …

【游戏设计原理】97 - 空间感知

一、游戏空间的类型 将游戏设计中的空间设计单独提取出来&#xff0c;可以根据其结构、功能和玩家的交互方式划分为以下几种主要类型。这些类型可以单独存在&#xff0c;也可以组合使用&#xff0c;以创造更加复杂和有趣的游戏体验。 1. 线性空间 定义&#xff1a;空间设计是…

va_list va_start va_end的概念和使用案例

va_list、va_start 和 va_end 是 C/C 中用于处理可变参数函数&#xff08;Variadic Functions&#xff09;的一组宏&#xff0c;定义在 <stdarg.h>&#xff08;C&#xff09;或 <cstdarg>&#xff08;C&#xff09;头文件中。它们允许函数接受不固定数量的参数&…

基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究

摘要&#xff1a;本文深入探讨在开源AI智能名片2 1链动模式S2B2C商城小程序的应用场景下&#xff0c;个人IP人设构建的理论与实践。通过剖析个人IP人设定义中的“诉求”“特质”“可感知”三要素&#xff0c;结合该小程序特点&#xff0c;阐述其对个人IP打造的影响与推动作用&…

数据库和数据表的创建、修改、与删除

1.标识符命名规则 数据库名、表名不得超过30个字符&#xff0c;变量名限制为29个 必须只能包含A-Z,a-z,0-9,_共63个字符 数据库名、表名、字段名等对象名中间不能包含空格 同一个MySQL软件中&#xff0c;数据库不能同名&#xff1b;同一个库中&#xff0c;表不能重名&#…

算法日记10:SC62求和(单调栈)(共享求解)

一、题目 二、题解&#xff1a; 1、首先&#xff0c;我们看到题目的第一个想法&#xff0c;就是把样例答案如何求解给列出来&#xff0c;图例如下 2、通过分析样例&#xff0c;可以很清晰的发现每一个数字都有其管辖的区间&#xff0c;因此我们可以想到能否找到一个数字它所管…

C#基础知识

0 C#介绍 定义与背景 C#&#xff08;发音为C - sharp&#xff09;是微软公司开发的一种高级编程语言。它是专门为构建在微软的.NET平台上运行的各种应用程序而设计的。在2000年左右推出&#xff0c;目的是结合当时编程语言的优点&#xff0c;如C的强大功能和Java的简单性与安全…

HTML 字符实体

HTML 字符实体 在HTML中,字符实体是一种特殊的表示方式,用于在文档中插入那些无法直接通过键盘输入的字符。字符实体在网页设计和文档编写中扮演着重要的角色,尤其是在处理特殊字符、符号和数学公式时。以下是关于HTML字符实体的详细解析。 字符实体概述 HTML字符实体是一…

Revit二次开发 自适应族添加放样融合

大多数博客给出的方案都是如何在有自适应族的情况下进行修改定位点或是将数据传入自适应族,如何直接在族文件中创建自适应模型并将点转换为自适应点,连接自适应点成为自适应路径这种方式没有文章介绍. 下面的代码中给出了如何在自适应族文件中创建参照点并转换为自适应点连接…

基于VMware的ubuntu与vscode建立ssh连接

1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 &#xff1a; ip a 红色挡住的部分就是我们要的地址&#xff0c;这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装&#xff1a;…

【1】快手面试题整理

[1]. 说说int和Integer的区别 int是Java中的基本数据类型&#xff0c;用于存储整数值。它直接在栈内存中存储数值&#xff0c;默认值是0&#xff0c;并且不能为null&#xff0c;本身不带方法。 Integer是int的包装类&#xff0c;属于引用类型。它在堆内存中存储一个对象&…

解决SetWindowCompositionAttribute使控件文本透明的问题

用以下参数调用该API&#xff0c;能实现类似Aero的模糊透明效果。 参数具体含义见 https://zhuanlan.zhihu.com/p/569258181 http://www.memotech.de/WindowComposition/Text.txt http://www.memotech.de/WindowComposition/WindowComposition.zip DWORD accent[4] { 3,0,0,0 …