算法闭关修炼百题计划(八)

一半来自力扣的push题单

  • 1.最大连续1的个数II
  • 2.长度为k的无重复字符子串
  • 3.句子的相似性
  • 4.移位字符串分组
  • 5.x的平方根
  • 6.Z字形变换

1.最大连续1的个数II

给定一个二进制数组nums,如果最多可以翻转一个0,则返回数组中连续1的最大个数

之前是Window,其实这个更简单,因为只有0和1,所以求sum就可以直到01的分布了

class Solution {
public:int findMaxConsecutiveOnes(vector<int>& nums) {int left = 0, right = 0;int res = 0, sum = 0;while(right < nums.size()){sum += nums[right++];while(sum < right - left - 1){sum -= nums[left++];}res = max(res, right - left);}return res;}
};

2.长度为k的无重复字符子串

给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的 数目。

以window[c]>1为缩小窗口的条件,而不是长度大于k为缩小窗口的条件,因为如果以无重复为条件的话,当长度为k的时候,无重复的字符也自然为k,这样逻辑清晰简洁。
另外最后找到一个窗口之后必须移动left,不能启动先在while中移动right来被动推动left的移动,因为这样会存在不必要的风险。

class Solution {
public:int numKLenSubstrNoRepeats(string s, int k) {unordered_map<char, int> window;int left = 0, right = 0;int ans = 0;while(right < s.size()){char c = s[right++];window[c]++;while(window[c] > 1){char d = s[left++];window[d]--;}if(right - left == k){ans++;window[s[left++]]--;}}return ans;}
};

3.句子的相似性

输入:
sentence1 = [“great”,“acting”,“skills”],
sentence2 = [“fine”,“drama”,“talent”],
similarPairs = [[“great”,“fine”],[“drama”,“acting”],[“skills”,“talent”]]
输出: true
解释: 这两个句子长度相同,每个单词都相似。

用unordered_map<string, unordered_set< string >>来处理,因为相似的可能是很多个字符串

class Solution {
public:bool areSentencesSimilar(vector<string>& sentence1, vector<string>& sentence2, vector<vector<string>>& similarPairs) {if(sentence1 == sentence2) return true;if(sentence1.size() != sentence2.size()) return false;unordered_map<string, unordered_set<string>> similarityMap;for(auto & similar : similarPairs){similarityMap[similar[0]].insert(similar[1]);similarityMap[similar[1]].insert(similar[0]);}for(int i = 0; i < sentence1.size(); i ++){string word1 = sentence1[i];string word2 = sentence2[i];if(word1 != word2 && !similarityMap[word1].count(word2)) return false;}return true;}
};

4.移位字符串分组

在这里插入图片描述
示例 1:
输入:strings = [“abc”,“bcd”,“acef”,“xyz”,“az”,“ba”,“a”,“z”]
输出:[[“acef”],[“a”,“z”],[“abc”,“bcd”,“xyz”],[“az”,“ba”]]

示例 2:
输入:strings = [“a”]
输出:[[“a”]]

分析:
给定一个字符串数组 strings,需要将具有相同“移位序列”的字符串分组。所谓“移位序列”指的是,通过多次“左移”或“右移”操作可以变为相同的字符串。例如,“abc”可以通过连续的右移变为“bcd”、“cde”……,也可以通过左移变为“zab”等。因此,“abc”、“bcd”、“xyz”等字符串具有相同的“移位序列”。

解题思路:
我们可以通过将每个字符串移位的标准化(比如转换到以‘a’开头的形式)来表示“移位序列”。
将转换后的标准形式作为键,使用哈希表存储相同“移位序列”的字符串。

class Solution {
public:// Helper function to get the shifted version of a string to a common formstring shiftToA(const string& s) {int offset = s[0] - 'a';string shifted;for (char c : s) {char new_char = (c - offset + 26) % 26 + 'a'; // Circular shiftshifted += new_char;}return shifted;}vector<vector<string>> groupStrings(vector<string>& strings) {unordered_map<string, vector<string>> map;for (const string& s : strings) {string key = shiftToA(s); // Shift string to normalized formmap[key].push_back(s);}vector<vector<string>> result;for (auto& entry : map) {result.push_back(entry.second);}return result;}
};

5.x的平方根

给你一个非负整数x,计算并返回x的算术平方根
由于返回的类型是整数,结果只保留整数部分,小数部分会被舍去
注意:不允许使用任何内置指数函数和算符

思路
对于一个给定的非负整数 x,我们想找到一个整数 y,使得 y * y <= x 并且 (y + 1) * (y + 1) > x。这样 y 就是 x 的整数部分平方根。

二分查找方法
设置左右边界 left = 0 和 right = x。
每次取中点 mid = (left + right) / 2。
检查 mid * mid 与 x 的关系:
如果 mid * mid 等于 x,则 mid 就是平方根,直接返回。
如果 mid * mid 小于 x,说明平方根在 mid 的右边,所以将 left 更新为 mid + 1。
如果 mid * mid 大于 x,说明平方根在 mid 的左边,所以将 right 更新为 mid - 1。
当 left 超过 right 时,right 就是整数部分的平方根。

class Solution {
public:int mySqrt(int x) {if (x < 2) return x;  // 对于 x = 0 或 1,平方根就是 x 本身int left = 1, right = x / 2, result = 0;while (left <= right) {int mid = left + (right - left) / 2;if (mid <= x / mid) {  // 防止 mid * mid 溢出,用 x / mid 替代result = mid;  // 更新结果left = mid + 1;} else {right = mid - 1;}}return result;}
};

6.Z字形变换

在这里插入图片描述
题目写的很那理解,跟Z几乎没有关系,个人认为是一个无限延长的W,一个字符串s,如果给的行数是4,那么s中每一个字符的行就是1234321234321…

class Solution {
public:string convert(string s, int numRows) {if (numRows == 1) return s;  // 如果只有一行,直接返回vector<string> rows(min(numRows, int(s.size())));  // 创建一个有 numRows 行的 vectorint curRow = 0;  // 当前行bool goingDown = false;  // 方向标志for (char c : s) {rows[curRow] += c;  // 将字符添加到当前行// 若到达顶部或底部,反转方向if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;// 根据方向更新当前行// 如果goingDown是true,就返回1,否则返回-1curRow += goingDown ? 1 : -1;}// 拼接所有行的字符串string result;for (string row : rows) result += row;return result;}
};

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

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

相关文章

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI&#xff0c;这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…

LM2 : A Simple Society of Language Models Solves Complex Reasoning

文章目录 题目摘要简介相关工作方法论实验结果结论局限性 题目 LM2&#xff1a;简单的语言模型社会解决复杂推理问题 论文地址&#xff1a;https://aclanthology.org/2024.emnlp-main.920/ 项目地址&#xff1a; https://github.com/LCS2-IIITD/Language_Model_Multiplex 摘要…

STM32从上电开始启动过程详解(上电->分散加载->main函数)

1.硬件复位之后&#xff0c;CPU 内的时序逻辑电路首先完成如下两个工作&#xff08; 程序代码下载到内部 flash 为例&#xff0c;flash首地址 0x0800 0000&#xff09;  将 0x08000000 位置存放的堆栈栈顶地址存放到 SP 中(MSP)。  将 0x08000004 位置存放的向量地址装入 P…

新版Apache tomcat服务安装 Mac+Window双环境(笔记)

简介&#xff1a;Tomcat服务器器的下载和安装&#xff1a; 安装前提 1&#xff09;电脑需要有java环境&#xff0c;jdk8以上&#xff0c;否则启动不不成功 2&#xff09;已经安装Sublime⽂文件编辑软件 3&#xff09;window电脑需要显示⽂文件拓拓展名 官网&#xff08;https:…

数据重塑:长宽数据转换【基于tidyr】

在数据分析和可视化过程中&#xff0c;数据的组织形式直接影响着我们能够进行的分析类型和可视化效果。这里简单介绍两种常见的数据格式&#xff1a;长格式&#xff08;Long Format&#xff09;和宽格式&#xff08;Wide Format&#xff09;&#xff0c;以及如何使用tidyr包进行…

ollama+springboot ai+vue+elementUI整合

1. 下载安装ollama (1) 官网下载地址&#xff1a;https://github.com/ollama/ollama 这里以window版本为主&#xff0c;下载链接为&#xff1a;https://ollama.com/download/OllamaSetup.exe。 安装完毕后&#xff0c;桌面小图标有一个小图标&#xff0c;表示已安装成功&…

基于lighthouse搭建私有网盘Cloudreve【开源应用实践】

基于lighthouse搭建私有网盘Cloudreve【超高性价比】 今天给大家分享一款私人网盘神器&#xff0c;既能存放你的文件文档&#xff0c;也能替你保存那不可告人的秘密~ 香菇今天将手把手教给大家如何在腾讯云轻量应用服务器上搭建个人专属网盘 1. 既爱又恨的网盘存储 很多小伙伴…

JavaScript高级篇 - 浏览器事件详解 DOM事件以及独立封装事件Util和Ajax封装

Dom事件 Model&#xff08;特定领域对象的抽象&#xff09;、Protocal&#xff08;针对数据格式的约定&#xff09; DOM(Document Object Model&#xff0c;文档对象模型)是针对HTML文档和XML文档的一个API。DOM描绘了一个层次化的节点树&#xff0c;允许开发人员添加、移出和…

MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准

随着 AI 和机器学习的需求不断加速&#xff0c;数据中心网络正在迅速发展以跟上步伐。对于许多企业来说&#xff0c;400GbE 甚至 800GbE 正在成为标准选择&#xff0c;因为数据密集型和时间敏感型 AI 工作负载需要高速、低延迟的数据传输。用于大型语言处理、实时分析和计算机视…

git config是做什么的?

git config是做什么的&#xff1f; git config作用配置级别三种配置级别的介绍及使用&#xff0c;配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级&#xff1f; 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

使用 npm 安装 Yarn

PS E:\WeChat Files\wxid_fipwhzebc1yh22\FileStorage\File\2024-11\spid-admin\spid-admin> yarn install yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后…

常用在汽车PKE无钥匙进入系统的高度集成SOC芯片:CSM2433

CSM2433是一款集成2.4GHz频段发射器、125KHz接收器和8位RISC&#xff08;精简指令集&#xff09;MCU的SOC芯片&#xff0c;用在汽车PKE无钥匙进入系统里。 什么是汽车PKE无钥匙进入系统&#xff1f; 无钥匙进入系统具有无钥匙进入并且启动的功能&#xff0c;英文名称是PKE&…

机器学习基础05

目录 1.随机森林 1.1随机森林的介绍 1.2算法原理 1.3API 2.线性回归 2.1回归的含义 2.2线性回归 2.3损失函数 2.4多参数回归 2.5最小二乘法MSE 2.6API 1.随机森林 集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类器。 集成…

数据库范式、MySQL 架构、算法与树的深入解析

一、数据库范式 在数据库设计中&#xff0c;范式是一系列规则&#xff0c;用于确保数据的组织和存储具有良好的结构、完整性以及最小化的数据冗余。如果不遵循范式设计&#xff0c;数据可能会以平铺式罗列&#xff0c;仅使用冒号、分号等简单分隔。这种方式存在诸多弊端&#…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

Hadoop生态圈框架部署(六)- HBase完全分布式部署

文章目录 前言一、Hbase完全分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.j…

YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构

摘要 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnCo…

Queuing 表(buffer表)的优化实践 | OceanBase 性能优化实践

案例问题描述 该案例来自一个金融行业客户的问题&#xff1a;他们发现某个应用对一个数据量相对较小的表&#xff08;仅包含数千条记录&#xff09;访问时&#xff0c;频繁遇到性能下降的情况。为解决此问题&#xff0c;客户向我们求助进行分析。我们发现这张表有频繁的批量插…

CentOS 8 安装 chronyd 服务

操作场景 目前原生 CentOS 8 不支持安装 ntp 服务&#xff0c;因此会发生时间不准的问题&#xff0c;需使用 chronyd 来调整时间服务。CentOS 8以及 TencentOS 3.1及以上版本的实例都使用 chronyd 服务实现时钟同步。本文介绍了如何在 CentOS 8 操作系统的腾讯云服务器上安装并…