编程学习、C#
一个秃头程序小哥
这个作者很懒,什么都没留下…
展开
-
性能瓶颈
性能测试的目的是评估当前系统性能指标,分析定位解决性能瓶颈,预防规避性能风险。性能分析是为了确定导致性能瓶颈的原因,而调优就是用来解决性能瓶颈。通过某些手段来让系统的性能得到提升是性能调优的主要目的。转载于https://blog.csdn.net/yang520java/article/det...转载 2018-08-20 19:13:16 · 339 阅读 · 1 评论 -
第一个只出现一次的字符
题目一:        在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出“b”。   &am原创 2018-07-23 15:14:15 · 1200 阅读 · 0 评论 -
剑指OFFER第45题——把数组排成最小的数qq_33575542
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 &nbs原创 2018-07-04 22:23:09 · 158 阅读 · 0 评论 -
字符串的排列及解决思路的总结
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路我们可以向前面的几个问题一样,先把问题分解成多个小问题再一一解决,比如:我们把一个字符串看成由两部分组成:第一部...原创 2018-06-29 10:36:25 · 418 阅读 · 0 评论 -
数字序列中某一位的数字
题目描述 数字以01234567891011121314…的格式序列化到一个字符序列中。在这个序列中,第5位是5(从0开始),第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。 &a原创 2018-07-04 11:42:29 · 438 阅读 · 0 评论 -
1~n整数中1出现的次数
题目描述        最直观的方法肯定是,累加1~n中每个整数1出现的次数,我们可以通过对10求余数判断整数的个位数字是不是1 。如果这个数字大于10,则除以10之后再判断个位数字是不是1 。基于这种思想,我们可以得出以下代码:class Solution1{ /// &原创 2018-07-03 22:22:53 · 718 阅读 · 2 评论 -
连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长...原创 2018-07-03 10:44:42 · 130 阅读 · 0 评论 -
数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。由于数据是从一个数据流中读出来,因而数据的数目随着时间的增加而增加,如果用一个数据容器来保存从流中读出来的数据,则当新的数据从流中读出来的时候,这些数据就插入数据容器。这个数据用什么数据结构...原创 2018-07-02 11:28:58 · 4348 阅读 · 5 评论 -
把数字翻译成字符串
题目描述        给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成‘a’,1翻译成‘b’,……,11翻译成‘l’,……,25翻译成‘z’。一个数值可能翻译成多个字符串。例如:12258有5种不同的翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”、“mzi”。请编程实原创 2018-07-05 15:30:06 · 1024 阅读 · 0 评论 -
礼物的最大价值
题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设,字符串中只包含‘a-z’的字符。例如,在字符串“arabcacfr”中,最长的不含重复字符的子字符串是“acfr”,长度为4 。 原创 2018-07-06 22:51:47 · 244 阅读 · 0 评论 -
数据结构之队列
队列(Queue):只允许在一端进行插入操作,在一端进行删除操作的线性表。 结构图如下: 跟栈相反的是,栈一般用顺序表来实现,而队列一般用链表来实现。原因是:队列每次需要在队头进行删除,如果使用顺序表结构会导致每次的删除都要移动n个元素,影响效率,所以使用链表来执行十分的方便,而栈每次都是在栈顶...原创 2018-08-07 16:43:07 · 233 阅读 · 0 评论 -
数据结构之栈的运用
        这两天复习数据结构的时候在学习栈,学习中碰到几个练习题,在这里附上最后的结果,全部通过栈来实现。       &n原创 2018-08-07 01:02:17 · 1222 阅读 · 0 评论 -
数据结构之栈
栈的定义:栈(Stack)是一个后进先出(Last In First Out)的线性表,只允许在表尾进行删除和插入操作。 注:表尾称之为栈顶,表头称之为栈底。栈的常用操作:1、插入操作(Push):也称为进栈、压栈、入栈。类似把子弹压入弹夹的操作。 2、删除操作(Pop):也称为出栈、弹栈。类似射出子弹时子弹在弹夹中的操作。 3、取栈长度(Get Length):得到栈中的元素数...原创 2018-08-07 00:33:44 · 235 阅读 · 0 评论 -
数据结构之算法——递归
递归,其实就是函数调用其本身来实现某些算法。 在非必要情况下,尽可能不用递归,而是使用迭代来进行处理。即,使用for、while、foreach等循环来取代递归。 &a原创 2018-08-09 23:43:20 · 4737 阅读 · 0 评论 -
两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共节点,链表结点定义如下:public class ListNode{ public int val; public ListNode next; public ListNode (int x) { val = x; }}总共三种解法:方法一,蛮力法 &nb...原创 2018-07-26 18:17:05 · 459 阅读 · 0 评论 -
二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法一: 最直观的方法,就是把这个数转变为二进制,然后判断最小位位是否为1,然后把数字往右移一位,这样右边原创 2018-07-15 16:45:29 · 4577 阅读 · 3 评论 -
数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如:在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,5},{7,4},{7,6},{5,4},{6,4}。 &n...原创 2018-07-25 13:34:31 · 903 阅读 · 0 评论 -
剑指OFFER第49题——丑数
问题描述        我们把只包含2、3、5的数称作丑数(Ugly Number)。实现一个函数求从小大到的顺序的第n个丑数。例如,6、8都是丑数,但是14就不是,因为它包含了因子7 。习惯上我们把1当作第一个丑数。方法一:   &am原创 2018-07-07 17:23:58 · 245 阅读 · 0 评论 -
合并两个排序的链表
问题描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序。思路若链表1的头节点小于链表2的头节点,则小值的头节点成为合并后链表的头节点。两个链表在第一次合并后,剩下的节点依然是排序的,因此合并这两个链表的步骤和前面一样,比较头节点的值,再把小值的头节点插入合并链表中。可以发现,这个合并的过程是重复的,可以定义一个递归函数完成这一系列的合并操作。确定解决办法后,...原创 2018-06-20 14:28:19 · 122 阅读 · 0 评论 -
反转链表
问题描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路假设现有链表1–>2–>3–>4–>5–>6 我们需要令后一个节点指向前一个节点,例如让2指向1,将会导致无法在链表中遍历到节点3,为了避免链表中节点2断开,需要在调整节点之前,把节点3保存下来。所以,在调整节点时,我们不止要知道当前的节点,还要保存当前节点的原创 2018-06-20 10:52:15 · 77 阅读 · 0 评论 -
序列化二叉树(剑指OFFER 面试题37)
题目描述请实现两个函数,分别用来序列化和反序列化二叉树。思路看到这个题,“反序列化二叉树”,就想起了前面解决的面试题“重建二叉树”,从前序遍历序列和中序遍历序列中构造一个二叉树。受此启发,可以先把一个二叉树序列化成一个前序遍历序列和一个中序遍历序列,然后在反序列化时通过这两个序列就能重构出二叉树了。但是,从上述思路可以看出,该方法有两个缺陷: 1、该方法要求二叉树不能有数值重复的...原创 2018-06-26 15:21:25 · 155 阅读 · 0 评论 -
表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。题解: 例如:.210等于0.210.因此A不是必须的。如果一个数没有整数部分,那么它的小数部分不能为空。 ...原创 2018-06-18 10:44:40 · 165 阅读 · 0 评论 -
(剑指OFFER面试题34)二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 例如下图,输入的二叉树和整数22,则打印出两条路径,第一条路径包含节点10、12;第二条路径包含节点10、5和7 。 一般的数据结构和算法的教材都很少介绍树的路径,因此,理解有点麻烦,大家可以想到哈弗曼树的权值,有点类似。 以上图的树来...原创 2018-06-24 16:58:55 · 2359 阅读 · 3 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。在这里小鸿为大家科普一下什么是二叉搜索树; 二叉搜索树,也叫二叉排序树、二叉查找树或BST(Binary Search Tree)。二叉搜索树或是一棵空疏,或者是一棵具有下列特性的非空二叉树: 1. 若左子树非空,则左子树上的所有节点的关键字...原创 2018-06-23 20:17:57 · 168 阅读 · 0 评论 -
从上到下打印二叉树
问题描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。看到这个问题,第一脑海里就浮现出了数据结构期间学到的树的广度遍历,那么按照当时的思路,就是建立一个队列(因为队列有先进先出的性质),从第一个根节点开始,把根节点储存进队列中,然后判断队列是否为空,不为空则打印该节点,然后判断该节点的左右子树是否为空,不为空,把它的左右子树添加进队列中,以此类推,直到最后把所有不为空的节点全部输出...原创 2018-06-23 11:18:38 · 516 阅读 · 0 评论 -
怎么用C#实现正则表达式的匹配(剑指OFFER面试题第十九题)
经过两天的课设+考试,终于有时间继续看书了,今天记录一道面试题“正则表达式的匹配”。 问题描述:请实现一个函数用来匹配包含’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包括0次)。在本题中,匹配是指字符串的所有自负匹配整个模式。 例如:字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但与”aa.a”和”ab*a”均不匹配。 一开...原创 2018-06-14 23:30:32 · 497 阅读 · 0 评论 -
栈的面试题
面试题30 包含min函数的栈题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调动min、push、及pop的时间复杂度都是O(1)。为了保证当我们弹出当前最小元素后,下一个最小元素也能够立即得出。因此我们可以把每次的最小元素放到另一个辅助栈中。以下列例子为例:首先往空栈里压入数字3,显然3是当前最小值,把3也压入辅助栈中。接下来压入4,发现...原创 2018-06-22 20:46:40 · 498 阅读 · 0 评论 -
顺时针打印矩阵(剑指OFFER 面试题29)
问题描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 由于是以外圈到内圈的顺序依次打印,所以我们可以把矩阵想象成若干个圈,这样...原创 2018-06-21 21:19:23 · 111 阅读 · 0 评论 -
对称的二叉树(剑指OFFER 面试题28)
问题描述以下三个二叉树,除了第一个二叉树A是对称的之外,后面两个B、C都不是对称二叉树。二叉树A 二叉树B 二叉树C 我们遍历二叉树通常有三种算法,前序中序和后序。在这3中遍历算法中,都是先遍历右子节点再遍历左子节点。那么我们可以换种思路,定义一个算法用来先遍历右子节点再遍历左子节点,比如:我们针对前序遍历,定义一个对称的遍历算法,先遍历父节点,再遍历它的右子节点,最后遍...原创 2018-06-21 16:07:20 · 209 阅读 · 0 评论 -
链表的删除操作
趁着今天还有点时间,再分享一题,这里有两个题目,题目一:给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。思路:把非头节点和尾节点的后一位节点的值覆盖到要删除的节点,然后把删除的节点的next指向它下一个节点的下一个节点就OJBK了如:1->2->3->4 需要删除3,那么把3覆盖到2那里得到 1->3->3->4 然...原创 2018-06-10 22:31:53 · 14993 阅读 · 0 评论 -
任意两个数的加法 C#版
今天看剑指OFFER,看到一个相关题目,要求定义一个函数,在该函数中可以实现任意两个整数的加法。由于没有限定输入两个数的大小范围,所以必须当作大数来处理。之前做面试题17 ,要求从1打印到最大的N位数,其中有一种思路和这题有点类似,花了一个小时,才编写出来,在输入格式正确的情况下(只输入数字,两个数字之间用空格隔开),能通过自己的所有案例,贴上代码,纪念自己复习算法的最后这段时光。共190+行代码...原创 2018-06-10 13:48:20 · 3912 阅读 · 1 评论 -
约瑟夫问题2
针对约瑟夫问题进行的提升。在看小甲鱼的数据结构的时候看到的提问,记录后实现了出来,用集合代替循环链表来实现。如果使用循环链表来实现的话,首先建立一个结构体,然后通过结构体指针建立循环链表,然后通过while循环,在链表中还有数据的情况下,通过for循环找到需要出列的数据,然后输出该数据,记录该节点的M值,再删除该节点,在下一个循环中执行前面的查找、记录、删除操作,直至最后一个数据结束。 问题: 编...原创 2018-05-13 23:56:17 · 362 阅读 · 0 评论 -
链表中环的入口节点
问题描述如果一个链表中包含环,如何找到环的入口节点? 例如:1–>2–>3–>4–>5–>6(–>3),在6后并没有结束,其next指向了中间的3,形成了一个环,所以环的入口节点是节点3。思路首先,确定一个链表里是否有环。由前面的题目启发,可以设置两个指针,一个快一个慢,然后当快的遇到慢的说明链表有环,如果慢的指针走到链表结尾还没有遇到快的指针,则...原创 2018-06-19 21:17:17 · 317 阅读 · 0 评论 -
链表中倒数第K个节点
问题描述题目一输入一个链表,输出该链表中倒数第k个结点。题目二求链表的中间节点。如果链表中的节点总数为奇数,则返回中间节点;如果节点总数为偶数,则返回中间两个节点的任意一个。为了解决这个问题,我们也可以定义两个指针,同时从立案表的头节点出发,一个指针一次走一步,另一个指针一次走两步,当走的快的指针走到链表的末尾时,走的慢的指针正好走到链表的中间。总结当我们用一个指针...原创 2018-06-19 17:51:57 · 142 阅读 · 0 评论 -
最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,这道题最简单的思路就是把数组排好序,然后取前面的k个数就好了,但是这种算法的时间复杂度为O(N*logN),所以我们需要利用更快的方法来解决这个问题。解法一:时间复杂度为O(N)的算法,只有当我们可以修改数组的时候才可以用 基于快排的思想,如果基于数组的...原创 2018-06-30 21:02:33 · 133 阅读 · 0 评论 -
二叉搜索树与双向链表(剑指OFFER 面试题36)
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路在二叉树中,每个节点都有两个指向子节点的指针。在双向链表中,每个节点也有两个指针,分别一个指向前一个指向后。由于这两种结构相似,同时二叉搜索树也是一中排序的数据结构,因此,理论上可以实现搜索二叉树和双向链表的转换。 在搜索二叉树中,左子节点的值总是小于父节...原创 2018-06-25 22:57:13 · 103 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。(相对位置:两数之间位置,比如:{1,2,3,4,5},偶数间,2的相邻偶数为4,那么调整数组后,2的相邻偶数也必须为4)。 思路: 用两个索引,一个指向数组的第一个数字,把第二个索引指向数组的最...原创 2018-06-18 19:58:06 · 336 阅读 · 0 评论 -
复杂链表的复制(剑指OFFER面试题35)
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 节点的定义如下:public class RandomListNode{ public int label; public RandomList...原创 2018-06-25 15:37:53 · 163 阅读 · 0 评论 -
数组中出现次数抄过一半的数字
问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路看到这个问题第一想法就是排序然后统计数字的出现次数就好了,题目给出的数组没有说是排序的,因此我们需要给他排序,时间复杂度为O(N*logN)。但是,最直观的算法通...原创 2018-06-29 20:15:38 · 93 阅读 · 0 评论 -
二叉树的镜像(剑指OFFER 面试题27)
问题描述二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...原创 2018-06-21 09:40:38 · 257 阅读 · 0 评论