程序员面试金典6-10

刷题链接

Leetcode程序员面试金典

06.字符串压缩

思路

直接用两个指针遍历字符串,i指向第一个重复的字符,j指向第一个不相同的字符,ji的下标差值即为重复字符的个数。

题解

class Solution {
public:string compressString(string S) {if (S.size() < 3)return S;string res;int i = 0, j = 0; // 双指针while (i < S.size()){if (S[i] != S[j]){res += S[i];res += to_string(j - i);i = j;}elsej++;}return S.size() <= res.size() ? S : res;}
};

07.旋转矩阵

思路

先将矩阵转置,再交换对应的列。

题解

class Solution {
public:void rotate(vector<vector<int>>& matrix) {//获取矩阵的阶数int n = matrix.size();//先将矩阵转置//遍历下三角for (int i = 0; i < n; ++i){for (int j = 0; j <= i; ++j ){swap(matrix[i][j], matrix[j][i]);}}//交换对应列,0和n-1列交换,1和n-2列交换,...for (int i = 0; i < n / 2; ++i){for (int j = 0; j < n; ++j){swap(matrix[j][i], matrix[j][n - 1 - i]);}}}//交换元素void swap(int &a, int &b){int tmp = a;a = b;b = tmp;}
};

08.零矩阵

思路

思路一

遍历矩阵,记录0元素的行号和列号;再遍历矩阵,将对应的行列元素置0。

  • 时间复杂度:O(M*N)
  • 空间复杂度:O(M+N)

思路二

用第一行和第一列分别代替思路一用于记录0元素行列号的一维数组,但是这时候第一行和第一列元素要被修改了,可以先引入两个变量记录第一行和第一列有没有0元素。

题解

思路一

class Solution 
{
public:void setZeroes(vector<vector<int>>& matrix) {// 获取行数和列数int r = matrix.size(), c = matrix[0].size();// 遍历,记录0元素的行、列号vector<int> index(r + c, 0); // 一维数组记录行列号for (int i = 0; i < r; i++){for (int j = 0; j < c; j++){if (matrix[i][j] == 0){index[i]++;index[j + r]++;}}}// 再遍历,根据行列号置0for (int i = 0; i < r; i++){for (int j = 0; j < c; j++){if (index[i] > 0 || index[j + r] > 0)matrix[i][j] = 0;                 }}}
};

思路二

class Solution 
{
public:void setZeroes(vector<vector<int>>& matrix) {// 获取行数和列数int r = matrix.size(), c = matrix[0].size();// 记录第一行和第一列是否有0元素bool flag_r0 = false, flag_c0 = false; // 遍历矩阵第0行for (int j = 0; j < c; j++){if (matrix[0][j] == 0)flag_r0 = true;}// 遍历矩阵第0列for (int i = 0; i < r; i++){if (matrix[i][0] == 0)flag_c0 = true;}// 从矩阵的第1行第1列开始遍历,如果某个位置的元素为0,// 将对应的第一行(列)的元素置为0,用于标记该行(列)存在0元素for (int i = 1; i < r; i++){for (int j = 1; j < c; j++){if (matrix[i][j] == 0){matrix[i][0] = 0;matrix[0][j] = 0;}}}// 再从矩阵的第1行第1列开始遍历,根据第一行和第一列将对应的元素置0for (int i = 1; i < r; i++){for (int j = 1; j < c; j++){if (matrix[0][j] == 0 || matrix[i][0] == 0)matrix[i][j] = 0;                 }}// 最后根据两个标记修改第一行和第一列if (flag_r0){for (int j = 0; j < c; j++)matrix[0][j] = 0;}if (flag_c0){for (int i = 0; i < r; i++)matrix[i][0] = 0;}}
};

09.字符串轮转

思路

如果两个字符串长度不相等,那么返回false;如果长度相等,那么:

  • 将字符串s1+s1,如果s2s1+s1的子串的话,返回true
  • 否则返回false

题解

class Solution {
public:bool isFlipedString(string s1, string s2) {if (s1.size() == 0 && s2.size() == 0)return true;if (s1.size() != s2.size())return false;string s = s1 + s1;if (s.find(s2) != string::npos)return true;elsereturn false;}
};

10.移除重复节点

思路

  1. 用一个map<int,bool>记录节点是否出现过,出现过则map[val] = true;
  2. 然后再次遍历链表,查询map;
  3. 如果it->second == true,说明是第一次出现,保留该节点并让it->second = false
  4. 如果it->second == false,则跳过该节点。

题解

class Solution {
public:ListNode* removeDuplicateNodes(ListNode* head) {if (!head)return NULL;unordered_map<int, bool> map;ListNode *p = head, *prev = NULL;while (p != NULL){map[p->val] = true;p = p->next;}p = head;while (p != NULL){auto it = map.find(p->val);if ( it->second == true ){prev = p;p = p->next;it->second = false;}else{prev->next = p->next;p = prev->next;}}return head;}
};

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

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

相关文章

Vivado生成网表文件并创建自定义IP

平台&#xff1a;vivado2018.3 应用场景&#xff0c;在设计的过程中&#xff0c;我们一些特定的模块需要交付给别人&#xff0c;但是又不想让他们看到其中的源码。就可以将源码封装成网表和IP文件。 vivado生成网表文件 设置综合。设置-flatten_hierarchy* 为full。 这里可…

【前端】JavaScript入门及实战86-90

文章目录 86 正则表达式87 字符串和正则相关的方法88 正则表达式语法(1)89 正则表达式语法(2)90 邮件的正则 86 正则表达式 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"tex…

基于ansible进行运维自动化的研究以及相关的属性

一、ansible-简介 介绍 ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c; 实现了批量系统配置、批量程序部署、批量运行命令等功能。 无客户端。 …

【香橙派开发板测试】:在黑科技Orange Pi AIpro部署YOLOv8深度学习纤维分割检测模型

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ Orange Pi AIpro开发板相关介绍1.1 &#x1f393; 核心配置1.2 ✨开发板接口详情图1.3 ⭐️开箱展示 二、2️⃣配置开发板详细教程2.1 &#x1f393; 烧录镜像系统2.2 ✨配置网络2.3 ⭐️使用SSH连接主板 三、…

为什么 FPGA 的效率低于 ASIC?

FPGA是“可重构逻辑”器件。先制造的芯片&#xff0c;再次设计时“重新配置”。 ASIC 不需要“重新配置”。你先设计&#xff0c;把它交给代工厂&#xff0c;然后制造芯片。 现在让我们看看这些芯片的结构是什么样的&#xff0c;以及它们的不同之处。 ● 逻辑单元&#xff1a;F…

小程序多排数据横向滚动实现

如何实现多排数据滚动效果 swiper 外部容器 swiper-item 每一页的数据 因为现在有多排数据,现在在swiper-item 中需要循环一个数组 初版 <template><view><view class"container"><view class"swiper-box"><swiper class&qu…

拍得更近、拍得更清:Pura 70 Pro如何做到5cm对焦?

众所周知&#xff0c;我们的眼睛离一个物品越近时&#xff0c;我们就越能看清该物品的细节&#xff0c;但物品距离超过某个极限时&#xff0c;反而会看不清楚——这是因为超出了眼睛所能对焦的极限。 对于手机摄像头来说&#xff0c;也具有相似的道理。当我们的手机镜头距离被…

windows server报错--无法启动此程序,因为计算机中丢失MSVCP120.dll解决办法(已解决)

无法启动此程序&#xff0c;因为计算机中丢失MSVCP120.dll解决办法。 win7系统丢失MSVCP120.dll解决方法&#xff1a; 1、安装微软常用运行库合集&#xff0c;就可以完美的解决&#xff0c;此C运行库算是很全了&#xff0c;安装它才免于重装系统&#xff0c;完美的解决了我的丢…

【elementui】记录el-table设置左、右列固定时,加大滚动条宽度至使滚动条部分被固定列遮挡的解决方法

当前elementui版本&#xff1a;2.8.2 现象&#xff1a;此处el-table__body-wrapper默认的滚动条宽度为8px&#xff0c;我加大到10px&#xff0c;如果不设置fixed一切正常&#xff0c;设置fixed后会被遮挡一点 el-table__fixed-right::before, .el-table__fixed::before 设置…

CentOS7使用Postfix, Dovecot搭建邮箱服务

CentOS7使用Postfix&#xff0c;Dovecot搭建邮箱服务的步骤与挑战&#xff1f; 为了满足企业内部或个人的邮件服务需求&#xff0c;使用CentOS7搭建一个稳定、安全的邮箱服务器是一个非常实用的解决方案。AokSend将详细介绍如何在CentOS7系统上使用Postfix和Dovecot搭建邮箱服…

Android源码目录结构概览

Android源码的目录结构是为了组织和模块化不同层次的系统组件而设计的。以下是Android源码目录结构的概览&#xff1a; abi: 应用二进制接口。art: 新的Android运行时环境&#xff08;ART&#xff09;。bionic: 系统C库。bootable: 启动引导相关代码。build: 系统构建规则和配…

linux系统进程占cpu 100%解决步骤

1.查找进程 ps aux 查看指定进程: ps aux | grep process_name2.根据进程查找对应的主进程 pstree -p | grep process_name 3.查看主进程目录并删除 ps -axu | grep process_name rm -rf /usr/bin/2cbbb

python可用于生产级别的日志模块

背景 生产环境中整个项目的日志信息需要每一天保存一个日志文件&#xff0c;日志保留的最大时间为30天。 自定义一个日志模块&#xff0c;代码如下: import os, logging from datetime import datetime from logging import handlersclass Logger:"""定义Logge…

修改 Tomcat 默认端口号最简单的方法

前言 每次在创建一个新的Maven项目之后&#xff0c;启动项目总会报8080端口号被占用的问题&#xff0c;既然每次都有这样的困扰&#xff0c;那不如一了百了&#xff0c;直接修改默认的8080端口号。 &#xff08;如果还是想要默认端口号。可参考我主页文章杀死占用了8080的进程…

IB user verbs介绍

本文来自对内核源代码文档/Documentation/infiniband/user_verbs.rst的翻译和理解。 在Infiniband设备帮助下&#xff0c;跨计算机的两个进程可以相互访问对方的虚地址空间。在Linux操作系统上&#xff0c;支持进程能直接访问本地Infiniband设备的资源&#xff0c;从而实现跨机…

openmv学习笔记(24电赛笔记)

#opemv代码烧录清除详解 openmv的代码脱离IDE运行程序&#xff0c;只需要在IDE中将代码烧录道flash里面&#xff0c;断开IDE连接&#xff0c;上电之后&#xff0c;会自动执行main.py中的程序&#xff0c;IDE烧录的时候&#xff0c;会默认将程序后缀保存为 .py文件。 ​​​​​…

防爆智能手机如何助力电气行业保驾护航?

在电气行业的智能化转型浪潮中&#xff0c;防爆智能手机以其强大的数据处理能力、实时通讯功能及高度集成的安全特性&#xff0c;正成为保障电力网络稳定运行、预防安全隐患的得力助手。 防爆智能手机在电气行业中发挥着重要的保驾护航作用&#xff0c;主要体现在以下几个方面&…

Agent类型解析:AI生成内容(AIGC)在不同领域的应用与影响

在近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的迅猛发展已经极大地影响了我们的工作和日常生活。其中&#xff0c;AI生成内容&#xff08;AIGC&#xff09;作为人工智能领域的一大应用方向&#xff0c;已开始在多个行业中发挥其独特的作用。从媒体出版到软件开…

微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)

前言 假设一个空数组,通过 push 方法追加了一个项,控制台打印的结果竟然是 Number 数值。 例如,以下微信小程序代码: // 源数组 var arr = [] // 追加数据 var tem = arr.push(数据) // 查看结果 console.log(tem)

swagger-ui.html报错404

问题1&#xff1a;权限受限无法访问 由于采用的Shiro安全框架&#xff0c;需要在配置类ShiroConfig下的Shiro 的过滤器链放行该页面&#xff1a;【添加&#xff1a;filterChainDefinitionMap.put("/swagger-ui.html", "anon");】 public ShiroFilterFact…