【剑指offer】03~05. 数组中的数字(C# 实现)
文章目录
- 前言
- 03. 数组中重复的数字
- 04. 二维数组中的查找
- 05. 替换空格
- 结语
前言
😃 大家好,我是writer桑,这是自己整理的 C# 做题记录,方便自己学习的同时分享出来,感谢支持。
03. 数组中重复的数字
题目描述:
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
代码实现:
public class Solution
{public int FindRepeatNumber(int[] nums){HashSet<int> set = new HashSet<int> { }; // 声明一个空的哈希表 foreach (int num in nums){if (set.Contains(num)) // 重复包含直接返回 return num;elseset.Add(num); // 无包含则添加 }return 0;}
}
思路分析:
- 首先创建一个容器,遍历数组中的每个数字并检查容器中有无这个数字, 如果没有则直接放入元素, 如果有则证明这个元素是重复的可直接返回。
- 这里的容器推荐使用哈希表(HashSet), 因为哈希表的查找效率很高,可以很好的提高整个算法的效率。
代码实现2:
public class Solution {public int FindRepeatNumber(int[] nums) {Array.Sort(nums); // 循环遍历for (int i = 1; i < nums.Length; i++) // 对数组进行排序 {if (nums[i] == nums[i - 1])return nums[i];}return 0; }
}
思路分析:
- 对数组进行排序,for 循环从第二个元素开始遍历数组,如果与前一个元素相等则可以证明该元素是重复的。
- 因为需要多执行数组排序这一步,所以性能没有第一种解法高,推荐第一种解法。
04. 二维数组中的查找
题目描述:
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]给定 target = 5,返回 true。
给定 target = 20,返回 false。
代码实现:
public class Solution {public bool FindNumberIn2DArray(int[][] matrix, int target) {if (matrix.Length == 0 || matrix == null) // 判断是否为空 return false; int i = matrix.Length - 1;int j = 0;while (i >= 0 && j < matrix[0].Length){if (matrix[i][j] > target)i--;else if (matrix[i][j] < target)j++;elsereturn true;}return false; }
}
思路分析:
- 将矩阵逆时针旋转 45° 并展开,可以发现类似于二叉搜索树, 那么从根节点开始搜索时,遇到比 target 大的元素就向左,反之则向右,以此来找到目标值 target 。
- 需要事先判断 matrix 是否为空,为空直接返回 false 。根据二叉搜索树的特性,选用矩阵的左下角的元素作为标志数 flag,若 flag > target ,则 target 一定在 flag 所在 行的上方, 若 flag < target ,则 target 一定在 flag 所在 列的右方,以此类推直到找到目标数 target 。
- 算法本身比较好理解,难点在于根据题目的描述找到突破口。
代码实现2:
public class Solution {public bool FindNumberIn2DArray(int[][] matrix, int target) {foreach (int[] arr in matrix){if(arr.Contains(target)) // 包含直接返回true{return true; }}return false; }
}
思路分析:
- 简单的循环输出,逐个数组进行判断有无包含目标数,有则直接返回 true 。当循环结束时,也即表示没有该目标数,返回 false 。
- 对比第一种解法,代码量更少, 但是因为每次都需要逐个遍历数组,所以性能较低,推荐第一种解法。
05. 替换空格
题目实现:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
代码实现:
public class Solution {public string ReplaceSpace(string s) {return string.Join("%20",s.Split(' ')); }
}
思路分析:
- 使用 Split 方法指定空格 ’ ’ 进行分割,再利用 Join 方法指定 “%20” 进行连接, 然后直接返回即可。
- 这种解法很容易想到,而且代码量很少、很简洁,一行代码搞定。
代码实现2:
public class Solution {public string ReplaceSpace(string s) {StringBuilder res = new StringBuilder(); // 声明可变字符串foreach(var c in s) // 循环遍历 {if(c == ' ')res.Append("%20");else res.Append(c); }return res.ToString(); }
}
思路分析:
- 声明可变字符串 res 用于存放返回结果,for 循环遍历字符串 s 依次判断字符元素, 如果为空格 ’ ’ 则替换为"%20"放入 res , 如果不为空格则直接放入 res 中。循环结束则直接将 res 转换为字符串类型返回即可。
- 与第一种解法相比,这种解法更常见,代码量较多,两者在性能上差不多。
结语
🌻 以上就是本次的做题记录啦,希望大家看完有所收获。同时希望大家多多支持,你们的支持就是笔者学习最大的动力!
相关文章:
【剑指offer】03~05. 数组中的数字(C# 实现)
文章目录前言03. 数组中重复的数字04. 二维数组中的查找05. 替换空格结语前言 😃 大家好,我是writer桑,这是自己整理的 C# 做题记录,方便自己学习的同时分享出来,感谢支持。 03. 数组中重复的数字 题目描述࿱…...

Docker入门教程
文章目录一、Docker概述1. 什么是容器技术?2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…...

I2C总线应用测试程序
参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…...
主从表的建立
//表查--病害id--主从表public static DataSet QueryGetQlgjDispdbdisidTABbyqidZC(string qid, string bwname){string SQLStringZ "select * from tl_qlsoft_cql_qlcheck_qlstye_bw a, tl_qlsoft_cql_qlcheck_qlstye_bw_gj b where a.chbwidb.chbwid and a.qli…...
Exporter介绍与指标数据,规范说明(更新中)
1.exporter是什么广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:2.exporter的来源与分类从Exporter的来源上来讲&am…...

[Android Studio] Android Studio Virtual Device虚拟机的功能试用
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🚀write…...
华为OD机试 - 检查数组中是否存在满足规则的数组组合1(Python)
检查数组中是否存在满足规则的数组组合1 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用…...

深圳“托育”放大招!政府出钱帮你带娃啦!
工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作,一边是孩子 父母都上班,宝宝谁来带? 未来这个问题将迎刃而解! 因为政府要出钱帮你带娃啦! 近日,深圳市总工…...

服务间调用方式 OpenFeign 的介绍和使用
文章目录前言1、 RestTemplate1.1、通用方法 exchange1.2、RestTemplate 和 OpenFeign 的区别2、RPC 和 HTTP2.1、RPC 是什么2.2、RPC 调用过程示意图2.3、HTTP 是什么2.4、HTTP 调用过程示意图2.5、对比3 、OpenFeign3.1 、OpenFeign 常用注解3.2 、案例前言 Feign 停更了&am…...

从开始测试到年薪40W,我的自动化测试艰辛历程
我希望我的故事能够激励现在的软件测试人,尤其是还坚持在做“点点点”的测试人。 你可能会有疑问:“我也能做到这一点的可能性有多大?”因此,我会尽量把自己做决定和思考的过程讲得更具体一些,并尽量体现更多细节。 …...
《C++ Primer Plus》第17章:输入、输出和文件(1)
对C输入和输出(简称I/O)的讨论提出了一个问题。一方面,几乎每个程序都要使用输入和输出,因此了解如何使用它们是每个学习计算机语言的人面临的首要任务;另一方面,C使用了很多较为高级的语言特性来实现输入和…...

静态代码审计插件 snyk 使用教程
目录 1、vscode 插件安装 2、手动生成 token 3、自动分析 1、vscode 插件安装 2、手动生成 token 点击登录链接:...

从“服务”,到“赋能”,日日顺再次定义供应链生态建设
在众多不确定因素的交织下,当下的供应链企业变革呈现出前所未有的紧迫感。一体化、全链路的趋势,为企业的发展指明方向,与此同时数字化与科技化开始承托供应链管理能力的升级与变革。 2月15日,由日日顺供应链、运联智库联合举办的…...

MySQL(一):B+ Tree,索引以及其优点, 索引实战, 聚簇索引和非聚簇索引, 最左匹配,索引失效
文章目录一、B TreeB Tree相比于红黑树的优点1. B树有更低的树高2. B树更符合磁盘访问原理二、MySQL索引2.1 B Tree索引2.2 哈希索引2.3 全文索引2.4 空间数据索引三、索引的优点以及什么时候需要使用索引什么时候需要使用索引四、索引实战建立普通索引建立唯一索引建立主键索引…...
06:进阶篇 - Hello,CTK!
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在接触任何语言时,我们总能看到“Hello,World!",它的中文意思是“你好,世界!”。由于简洁、实用,所以非常著名。 为了延续这个优良传统并迎接 CTK,在演示第一个插件时,我们使用“Hello,CTK!&qu…...

SpringCloud(一)注册中心
注册中心eureka服务端客户端负载均衡nacos服务端客户端nacos分级存储模型配置集群属性nacos环境隔离-namespace临时实例和非临时实例Eureka和Nacos的异同负载均衡策略饥饿加载eureka 服务端 依赖 <!-- eureka注册中心服务端依赖--><dependencies><depe…...
centos7环境配置
Python Centos7中自带的python2,如果要是用python3,就需要自己安装了,因为yum源中没有python3,需要下载包进行源码编译安装。 安装步骤 1、安装python3相关依赖包 yum -y install zlib-devel bzip2-devel openssl-devel nc…...

如何解锁华为手机PIN/图案/指纹/人脸锁?
您的手机存储主要数据,因此为您的设备设置安全代码让您高枕无忧。屏幕和生物识别锁可在手机丢失时保护您的手机,并使其在被盗时无法访问。每次您需要密码来解锁手机时,但如果您被锁在密码之外怎么办? 今天的话题将独家帮助华为用…...

物理层基本介绍
corset 0 告诉下行初始带宽是多少 initail DL BWP, 4g 是20M带宽,5G是FR1 如果5G是全带宽的话,手机很快就会没电了。 告诉手机带宽会分布在某一个带宽里面去,将手机的带宽调整就行。 DCI,告诉手机,未来的某一个时刻&a…...

数据库原理及应用期末复习汇总(附某高校期末真题试卷)
文章目录《数据库原理及应用》试题1一、选择题(共35分)二、填空(每空1分,共20分)三、T-SQL综合题(共35分)四、综合应用题(共10分)《数据库原理及应用》试题2一、选择题(共35分)二、填空…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...