![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
a_clear_chen
目前是个程序小菜鸡,专注unity与c#
展开
-
剑指Offer——实现单例模式
题目:设计一个类,我们只能生成该类的一个实例。解法一:只适用于单线程代码如下:public sealed class SingleTon1 { public static void Print() { Console.WriteLine("Singleton1 print"); } private ...原创 2018-05-06 14:46:20 · 201 阅读 · 0 评论 -
剑指Offer——从尾到头打印链表
题目描述:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。分析:从尾到头打印,那就是先进后出,根据这个可以想想能不能用栈实现,这个是可以的。先按顺序把节点的值入栈,所有值入栈之后再出栈,直到栈为空。除了使用栈之外还有什么方法吗?有的,还有一个和栈类似,那就是递归,递归在本质上就是一个栈结构,所以就有两种解法。代码如下:声明节点对象,并提供必要的方法:class ListNode {...原创 2018-05-08 15:35:35 · 272 阅读 · 0 评论 -
剑指Offer——数组中重复的数字
题目描述:在一个长度为n的数组里所有数字都在0~n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。分析:解法一:先排序,再找出重复的数字,可以找出所有重复的数字。代码如下:public sealed class SortAndFind { //快排的单元排序 private stati...原创 2018-05-08 16:07:22 · 162 阅读 · 0 评论 -
剑指Offer——不修改数组找出重复的数字
题目描述:在一个长度为n+1的数组里所有数字都在1~n的范围内,所以数组中至少有一个数是重复的。请找出数组中任意一个重复的数,但不能修改输入的数组。分析:重复的数一定在某范围内,我们可以逐渐缩小范围,直到找到重复的数。代码如下:public sealed class ErfenAndFind { public static int one = -1; pub...原创 2018-05-08 16:15:19 · 202 阅读 · 0 评论 -
剑指Offer——二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:笨方法是将二维数组转为一维数组,再去判断,但这样性能很差,既耗时又耗空间。仔细分析问题,提供的二维数组是有规律的,每一行从左到右递增,每一列从上到下递增,那么,假如一行末尾的数小于它,则那一行的数都小于它,一列开头的数...原创 2018-05-08 16:29:44 · 104 阅读 · 0 评论 -
剑指Offer——替换空格
题目描述:请实现一个函数,把字符串中的每个空格替换成"%20"。分析:首先,要将字符串转换成字符数组,再进行替换。不过在c#中,数组一旦初始化了,就无法再改变存储空间的大小,所以我用了两个字符数组。然后怎么替换呢?可以扫描到空格后将后面的字符后移,然后进行替换,这样时间复杂度为O(n^2)。有没有时间复杂度为O(n)的方法呢?我们可以试一下从后往前扫描会怎么样。先扫描一遍,获取空格的数量,然后分配...原创 2018-05-08 16:47:35 · 138 阅读 · 0 评论 -
剑指Offer——合并数组
题目描述:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入A1中,并且所有数字是排序的。分析:因为两个数组都已经排序了,切A1的末尾有足够的空间,那我们就从末尾这个角度来解。从A1和A2的末尾开始比较,将更大的放在A1容量的末尾,然后向前扫描。因为是用c#写,所以我是重新声明了一个数组来存储A1和A2的值。代码如下:private st...原创 2018-05-08 17:16:05 · 181 阅读 · 0 评论