【尊享面试100题】数组/字符串

多看优秀的代码

  • 1.数组列表中的最大距离
  • 2.字符串的左右移
  • 3.相隔为1的编辑距离
  • 4.形成字符串的最短路径
  • 5.连接二进制表示可形成的最大数值

1.数组列表中的最大距离

给定 m 个数组,每个数组都已经按照升序排好序了。

现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。

一开始用第一个元素sort了,这样反而会出错,因为一个元素的数组可能是其他数组的中间值,这种情况他应该和左右两端都比较才对
直接挨个比较左右,同步更新preMax和preMin

class Solution {
public:int maxDistance(vector<vector<int>>& arrays) {int preMin = arrays[0][0];int preMax = arrays[0].back();int ans = INT_MIN;for(int i = 1; i < arrays.size(); i ++){ans = max(ans, arrays[i].back() - preMin);ans = max(ans, preMax - arrays[i][0]);preMin = min(preMin, arrays[i][0]);preMax = max(preMax, arrays[i].back());}return ans;}
};

2.字符串的左右移

给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift,其中 shift[i] = [direction, amount]:

  • direction 可以为 0 (表示左移)或 1 (表示右移)。
  • amount 表示 s 左右移的位数。
  • 左移 1 位表示移除 s 的第一个字符,并将该字符插入到 s 的结尾。
  • 类似地,右移 1 位表示移除 s 的最后一个字符,并将该字符插入到 s 的开头。

对这个字符串进行所有操作后,返回最终结果。

输入:s = “abc”, shift = [[0,1],[1,2]]
输出:“cab”
解释:
[0,1] 表示左移 1 位。 “abc” -> “bca”
[1,2] 表示右移 2 位。 “bca” -> “cab”

始终没有别人的代码优雅…

统一操作符之后用substr
其中s.substr(n - k)是取s从下标n-k开始一直到末尾的子串

class Solution {
public:string stringShift(string s, vector<vector<int>>& shift) {int k = 0;for (auto& v: shift) {if (v[0] == 0) k -= v[1];else k += v[1];}int n = s.size();k %= n;if (k < 0) k += n;return s.substr(n - k) + s.substr(0, n - k);}
};

3.相隔为1的编辑距离

可以插入,删除和替换,限制只能一次使得s==t,少一次都不行
所以注意sn == tn的情况,return的是flag,因为如果是true的话,flag一定是变化过一次的!

class Solution {
public:bool isOneInsert(string shorter, string longer){int sn = shorter.size();int ln = longer.size();int index1 = 0, index2 = 0;while(index1 < sn && index2 < ln){if(shorter[index1] == longer[index2]){index1++;}index2++;if(index2 - index1 > 1) return false;}return true;}bool isOneEditDistance(string s, string t) {int sn = s.size();int tn = t.size();if(sn - tn == 1){return isOneInsert(t, s);}else if(tn - sn == 1){return isOneInsert(s, t);}else if(tn == sn){bool flag = false;for(int i = 0; i < sn; i ++){if(s[i] != t[i]){if(!flag){flag = true;}else{return false;}}}return flag;}else return false;}
};

4.形成字符串的最短路径

在这个问题中,我们得到了两个字符串,source 和 target。**我们需要用 source 最小数量的子 序列,让它们连起来等于 target。**如果无法做到,请返回 -1。

贪心

class Solution {
public:int shortestWay(string source, string target) {int ans = 0, i = 0, j;// 外部循环,直到目标字符串的指针 `i` 遍历完 `target` 字符串while(i < target.size()){// 保存当前的 `i` 位置,方便后续判断是否有无法匹配的字符j = i;// 遍历 `source` 字符串以匹配 `target` 中的字符for(auto &e : source){// 如果 `source` 当前字符 `e` 和 `target[i]` 相等if(e == target[i]) i ++; // 匹配到字符,`i` 向前移动,指向 `target` 的下一个字符}// 如果 `i` 没有前进,说明在 `source` 中找不到当前的 `target[i]` 字符if(i == j) return -1;ans++;}return ans;}
};

5.连接二进制表示可形成的最大数值

给你一个长度为 3 的整数数组 nums。

现以某种顺序 连接 数组 nums 中所有元素的 二进制表示 ,请你返回可以由这种方法形成的 最大 数值。

注意 任何数字的二进制表示 不含 前导零。

class Solution {
public:int f(int a, int b, int c){vector<int> res;while(a){res.push_back(a & 1);a /= 2;}while(b){res.push_back(b & 1);b /= 2;}while(c){res.push_back(c & 1);c /= 2;}reverse(res.begin(), res.end());//res是倒序存的!!int ans = 0;int n = res.size();for(int i = res.size() - 1; i >= 0; i --){if(res[i] == 1) ans += pow(2, res.size() - i - 1);}return ans;}int maxGoodNumber(vector<int>& nums) {int m = 0;m = max(m, f(nums[0], nums[1], nums[2]));m = max(m, f(nums[0], nums[2], nums[1]));m = max(m, f(nums[1], nums[0], nums[2]));m = max(m, f(nums[1], nums[2], nums[0]));m = max(m, f(nums[2], nums[0], nums[1]));m = max(m, f(nums[2], nums[1], nums[0]));return m;}
};

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

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

相关文章

微知-Lecroy力科的PCIe协议分析仪型号命名规则(PCIe代,金手指lanes数量)

文章目录 要点主要型号命名规则各代主要产品图片Summit M616 协议分析仪/训练器Summit T516 分析仪Summit T416 分析仪Summit T3-16分析仪Summit T28 分析仪 综述 要点 LeCroy(力科)成立于1964年&#xff0c;是一家专业生产示波器厂家。在美国纽约。一直把重点放在研制改善生产…

Hallo2 长视频和高分辨率的音频驱动的肖像图像动画 (数字人技术)

HALLO2: LONG-DURATION AND HIGH-RESOLUTION AUDIO-DRIVEN PORTRAIT IMAGE ANIMATION 论文&#xff1a;https://arxiv.org/abs/2410.07718 代码&#xff1a;https://github.com/fudan-generative-vision/hallo2 模型&#xff1a;https://huggingface.co/fudan-generative-ai/h…

TikTok营销实用技巧与数据分析工具:视频洞察

TikTok凭借其独特的机制和庞大的流量&#xff0c;成为了众多品牌和卖家对产品进行宣传推广的必要平台之一。要在TikTok上优化营销效果、提升推广效率&#xff0c;可以使用平台提供的重要工具——视频洞察&#xff08;Video Insights&#xff09;。 一、视频洞察功能与技巧 视频…

React Native 项目使用Expo模拟器运行iOS和Android

iOS没有连接设备&#xff1a; 确保你已经用 USB 线将你的 iOS 设备连接到了你的 Mac。 设备未信任&#xff1a; 如果你的设备是第一次连接到 Mac&#xff0c;可能需要在设备上信任这台计算机。通常&#xff0c;当你连接设备时&#xff0c;设备上会弹出一个对话框&#xff0c;…

线性回归(一)

线性回归 1.基本术语 ①特征&#xff1a;预测所依据的自变量称为特征或协变量 ②标签&#xff1a;试图预测的目标称为标签或目标 2.举个栗子 线性假设是指目标&#xff08;房屋价格&#xff09;可以表示为特征&#xff08;面积和房龄&#xff09;的加权和&#xff0c;如下面…

YOLOv11入门到入土使用教程(含结构图)

一、简介 YOLOv11是Ultralytics公司在之前的YOLO版本上推出的最新一代实时目标检测器&#xff0c;支持目标检测、追踪、实力分割、图像分类和姿态估计等任务。官方代码&#xff1a;ultralytics/ultralytics&#xff1a;ultralytics YOLO11 &#x1f680; (github.com)https://g…

解决跨域问题

跨域是浏览器受同源策略的限制&#xff0c;同源策略是浏览器为确保资源安全&#xff0c;而遵循的一种策略&#xff0c;该策略对访问资源进行了一些限制&#xff08;如发送 ajax 请求&#xff0c;操作 dom&#xff0c;读取 cookie&#xff09;。 最常见的影响就是发送 ajax 请求…

【微知】如何通过命令行在非串口界面触发sysrq的help信息?(echo h > /proc/sysrq-trigger)

背景 在服务器上&#xff0c;触发sysrq通常需要在串口执行sysrq热键&#xff0c;比如 ~相关的操作 如何通过在ssh界面触发sysrq触发一些操作&#xff1f; 命令 通过sysrq指定的/proc接口文件进行操作 echo h > /proc/sysrq-trigger dmesg #产看输出的帮助信息然后根据打…

Junit + Mockito保姆级集成测试实践

一、做好单测&#xff0c;慢即是快 对于单元测试的看法&#xff0c;业界同仁理解多有不同&#xff0c;尤其是在业务变化快速的互联网行业&#xff0c;通常的问题主要有&#xff0c;必须要做吗&#xff1f;做到多少合适&#xff1f;现在没做不也挺好的吗&#xff1f;甚至一些大…

MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)

DDL&#xff08;数据定义语言&#xff09; DDL&#xff08;Data Definition Language&#xff09;&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段) 。 一、数据库操作 1、 查询mysql数据库管理系统的所有数据库 语法&#…

django(3)jinja2模版的使用

启动模版 安装jinja2 pip install jinja2 配置setting TEMPLATES中添加配置 {BACKEND: django.template.backends.jinja2.Jinja2,DIRS: [os.path.join(BASE_DIR,jinja2)], #模版在项目中的所在位置} template中各项的含义 这个配置项中模版自上而下加载&#xff0c;重名…

Spring Boot框架的电影评论系统设计与实现

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架&#xff0c;JAVA作为开发语言&#…

基于单片机的智能小区门禁系统设计(论文+源码)

1总体架构 智能小区门禁系统以STM32单片机和WiFi技术为核心&#xff0c;STM32单片机作为主控单元&#xff0c;通过WiFi模块实现与手机APP的连接&#xff0c;构建整个门禁系统。系统硬件包括RFID模块、指纹识别模块、显示屏、按键以及继电器。通过RFID绑定IC卡、APP面部识别、指…

HarmonyOS鸿蒙分布式文件操作的时候权限问题

对于分布式文件跨设备操作的时候&#xff0c;一定记得设置文件等级权限&#xff0c;否则会出现各种不同的异常&#xff1a; setSecurityLabel 设置文件权限 代码&#xff1a; //设置文件权限securityLabel.setSecurityLabel(destUriPath, s1).then(() > {PhLog.info(Succee…

红队-安全见闻篇(下)

声明 学习视频来自B站UP主 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 硬件设备(知道对应的硬件上对应的扫描器就性) 一、硬件设备…

PHP中‘BITWISE AND‘运算符和‘LOGICAL AND‘运算符的区别

在PHP中&#xff0c;BITWISE AND&#xff08;位与&#xff09;运算符和LOGICAL AND&#xff08;逻辑与&#xff09;运算符都用于执行与操作&#xff0c;但它们作用于不同的数据类型&#xff0c;并产生不同的结果。 BITWISE AND 运算符 定义&#xff1a; BITWISE AND运算符&am…

Linux中Kconfig结构分析

目录结构中&#xff0c;某一层的内容无非就是&#xff0c;要么全是目录&#xff0c;要么全是文件&#xff0c;要么既有目录又有文件&#xff0c;我们的Kconfig文件通常是分布在各级目录中。那么&#xff0c;这些Kconfig如何一层一层地去组织起来呢&#xff1f; 首先明确下&…

切换主题的方案

1、link标签动态引入 其做法就是提前准备好几套CSS主题样式文件&#xff0c;在需要的时候&#xff0c;创建link标签动态加载到head标签中&#xff0c;或者是动态改变link标签的href属性 优点&#xff1a;实现了按需加载&#xff0c;提高了首屏加载时的性能 缺点&#xff1a; …

VTK的学习方法-第二类型应用

VTK的高级使用方法是自己写一个算法&#xff08;Filter&#xff09;&#xff0c;本文使用的数据类型位polydata&#xff0c;这个数据类型应用比较广泛。 我们的算法一般是继承VTK里面的vtkpolydataalgorithm&#xff0c;然后自己添加一些变量&#xff0c;重写&#xff08;over…

在Ubuntu 20.04 上安装 CoppeliaSim

在 Ubuntu 20.04 上安装 CoppeliaSim Edu V4.6.0 rev18 的步骤如下&#xff1a; 1. 下载安装文件: 首先&#xff0c;确保您已经下载了 CoppeliaSim_Edu_V4_6_0_rev18_Ubuntu20_04.tar.xz 文件。您可以从 Coppelia Robotics 的官方网站下载。 2. 解压缩文件: 打开终端&#…