算法练习
文章平均质量分 51
感谢努力的自己
我期待,辉煌灿烂后黑暗的深邃,我渴望,喧哗飞扬后宁静的永恒,就像烈焰散尽的灰烟,自由自在,四处飘荡。
自此,我始信,书中自有颜如玉,书中自有黄金屋。
展开
-
剑指offer-求1+2+。。。+n
剑指offer-求1+2+。。。+n题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路这题限制规则后,主要看语言特性了,哈哈:public class Solution { public int Sum_Solution(int n) { int sum ...原创 2019-04-15 22:03:02 · 179 阅读 · 0 评论 -
剑指offer-第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路注意不要理解错误,是找到第一个只出现一次的字符,并返回它的位置,可以用暴力的解法,如下:public class Solution { public int FirstNotRepeatingChar(Stri...原创 2019-03-10 21:20:40 · 125 阅读 · 0 评论 -
剑指offer-数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<...原创 2019-03-14 19:40:38 · 789 阅读 · 0 评论 -
剑指offer-丑数
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路按顺序把每个丑数放在数组中,求下一个丑数。下一个丑数必定由有数组中的某一个丑数A * 2, B * 3, C * 5 的中的最小值得来。即如果p是丑数,那么p=2^x * 3^y * 5^z那么...原创 2019-03-09 22:24:43 · 143 阅读 · 0 评论 -
剑指offer-把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路这一题主要用到了字符串转换的技巧,大致意思就是 比较数组中的两个数时,如a和b,先将这两个数转换为字符串,如a+b和b+a,然后比较a+b和b+a,哪个大,若a+b大,说明b应该放在a前面,最终数组重新排序...原创 2019-03-09 21:06:15 · 123 阅读 · 0 评论 -
剑指offer-数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路这个题看到后很容易联想到两层循环,外面先取一个数,然后内层循环再遍历一遍统计外层那个数相等的次数,如下所示:public class Solution { pub...原创 2019-03-03 16:53:44 · 118 阅读 · 0 评论 -
剑指offer-连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-03-05 22:07:26 · 120 阅读 · 0 评论 -
剑指offer-字符串的排列
剑指offer-字符串的排列题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路对于无重复值的情况:固定第一个字符,递归取得首位后面的各种字符串组合;再把第一个字符与后...原创 2019-03-02 20:07:53 · 250 阅读 · 0 评论 -
剑指offer-二叉排序树ed后续遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路这道题首先要找到二叉排序树后序遍历(遍历顺序为左右根)的特点:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。所以由此可以...原创 2019-02-26 17:27:29 · 179 阅读 · 0 评论 -
剑指 offer-二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路看这个图,其实熟悉数据结构的话,就知道这题考察的是树的线索化,搜索二叉树特点就是:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的...原创 2019-03-01 20:05:33 · 151 阅读 · 0 评论 -
剑指offer-二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路求二叉树深度,首先想到了层次遍历,经典的非递归层次遍历就是利用辅助队列,先将头节点入队列,当队列不空时出队列的节点记为current,当current左节点不空时入队列,其右节点不空时入队列,如此循环即可。求深度:构造变量cur记录当前层访问到的节点数,wi...原创 2019-03-19 21:17:58 · 144 阅读 · 0 评论 -
剑指offer-平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。所以要判断左右子树高度差,最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树...原创 2019-03-20 20:23:09 · 139 阅读 · 0 评论 -
剑指offer-孩子们的游戏
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一...原创 2019-04-08 22:07:02 · 441 阅读 · 0 评论 -
剑指offer-扑克牌的顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张...原创 2019-04-02 21:47:43 · 212 阅读 · 0 评论 -
剑指offer-和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。思路这一题刚开始看到了递增、排序等字眼就瞬间想到了用左右窗口来解决,但是题目要求多对数字和为S时,找到两个数乘积最小的,这个地方困扰我了好久,后来看到了用数学公式推的方法(自己写算法很少会想到用数学推...原创 2019-03-28 22:12:48 · 137 阅读 · 0 评论 -
剑指offer-和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序...原创 2019-03-27 21:22:42 · 132 阅读 · 0 评论 -
剑指offer-翻转单词顺序列
题目描述最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路这题很简单,主要考察字...原创 2019-03-31 22:18:10 · 203 阅读 · 0 评论 -
剑指offer-左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路这题首先想到的就是用两个字符数组,第一个存取S的前n位,然后后面前移,最后再把存取的数组的n...原创 2019-03-30 21:45:21 · 153 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。思路这题乍一看很简单,找出一个数组中只出现一次的数字,当时很不理解为什么要找到2个,不考虑性能的情况下,有如下简单的解法:import java.util.ArrayList;public class Solution {public void FindNumsAppearOnce(i...原创 2019-03-22 22:05:23 · 162 阅读 · 0 评论 -
剑指offer-数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。思路当然可以直接暴力解法:public class Solution { public int GetNumberOfK(int [] array , int k) { int sum =0; for(int i=0;i<array.length;i++){ if(array[i]==k) ...原创 2019-03-18 20:20:14 · 145 阅读 · 0 评论 -
剑指offer-两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。思路首先要理解公共结点的含义,不是说两个节点所对应的val相等,而是说第一个公共点之后的next都是一样的,所以他们必然有公共的尾部。而题目中已经告诉了,两个链表必有公共结点,所以有以下解法://方法一:运用HasnMap的特性import java.util.HashMap;public class Solution { pu...原创 2019-03-17 18:45:11 · 163 阅读 · 0 评论 -
剑指offer-最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路这一题很简单,可以先用循环将整数排序,然后在输出前k个数,但是这样的话时间复杂度比较高,若是使用Arrays.sort来排序的话,内部好像是使用的快速排序和优化的合并排序合并排序的时间复杂度是nlogn, 快速排序的平均时间复杂度也是nlogn,但是合并排序的...原创 2019-03-04 21:54:19 · 212 阅读 · 0 评论 -
剑指offer-包含min函数的栈
剑指offer-包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路这道题乍一看题目描述可能会有点懵,反正我是没看懂是想要干什么,但是描述一般会把问题描述的很清楚,这里就是找到一个时间复杂度为o(1)的min函数,一般找最小值,首先想的就是for循环,但是如果是o(1)的话,那就是直接就能找到,不能做遍历,...原创 2019-02-19 21:36:36 · 155 阅读 · 0 评论 -
剑指offer-复杂链表的复制
剑指offer-复杂链表的复制题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路首先读懂题目的意思,就是有一个复杂链表,没有前项指针,只有后项指针,然后求一个函数能够复制这个链表,看这张图所以总体就是分为三步,...原创 2019-02-28 19:40:36 · 147 阅读 · 0 评论 -
算法练习-串的简单处理
在实际的开发工作中,对字符串的处理是最常见的编程任务。 本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1. 把每个单词的首字母变为大写。 2.把数字与字母之间用下划线字符(_)分开,使得更清晰 3. 把单词中间有多个空格的调整为1个空格。这道题很简单,用不到太难的算法,主要就是考你的细心程序,要考虑到所有的情况 首先说一个常规的解法 1)遍历所有情况:pub原创 2016-03-06 09:28:17 · 1081 阅读 · 1 评论 -
算法练习-字符排列
算法描述: 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串,则输出由字符所能排列出来的所有字符串,如输入“abc”,则应输出: abc acb bac bca cba cab该问题可用递归的思想去做,可以这样想:固定第一个字符,求后面两个字符的排列。当两个字符的排列求好之后,我们把第一个字符交换,得到,接着我们固定第一个字符,求后面两个字符的排列原创 2016-03-06 08:49:25 · 723 阅读 · 0 评论 -
m进制转10进制
问题描述Description将m进制数n转化成一个十进制数 m题目保证转换后的十进制数输入描述 Input Description共一行n和m输出描述 Output Description共一个数表示m进制的n化成十进制的数样例输入 Sample Input1010 2样例输出 Sample原创 2015-08-09 10:17:41 · 857 阅读 · 0 评论 -
十进制转换m进制
今天写算法练习,看到的一个不错的十进制转换m进制数的方法:/*题目描述 Description将十进制数n转换成m进制数 m<=16n<=100输入描述 Input Description共一行n和m输出描述 Output Description共一个数表示n的m进制*/#include#includeusing namespace std;int ma原创 2015-08-09 10:07:55 · 3190 阅读 · 0 评论 -
算法训练-骑士走棋盘
说明:骑士旅游(Knight tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置?解法骑士的走法,基本上可以使用递回来解决,但是纯綷的递回在维度大时相当没有效率,一个聪明的解法由J.C. Warnsdorff在1823年提出,简单的说,先将最难的位置走完,接下来的路就宽广了,原创 2015-03-22 10:15:48 · 1804 阅读 · 0 评论 -
2048控制台版。
今天偶然看到了别人写的2048控制台版本的程序,感觉挺有意思的,就拿这个练练手,参考别人代码思想也写了一个控制台版本的效果如图:本来用的编译器是VS6.0,代码通过后,转移到了VS2010环境下,居然出现了错误:error C4996: 'scanf': This function or variable may be unsafe.原创 2014-12-20 17:56:39 · 888 阅读 · 0 评论 -
哈夫曼树 C语言实现
1、基本概念a、路径和路径长度若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它等于路径上的结点数减1.b、结点的权和带权路径长度在许多应用中,常常将树中的结点赋予一个有着某种意义的实数,我们称此实数为该结点的权,(如下面一个转载 2014-11-24 09:16:11 · 851 阅读 · 0 评论 -
广义表的基本操作
这几天学《数据结构》,被其中的广义表难住了,经过这两天原创 2014-11-15 17:43:21 · 12710 阅读 · 1 评论 -
白话经典算法系列之二 直接插入排序的三种实现
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。转载 2014-10-27 21:46:02 · 792 阅读 · 0 评论 -
算法练习-猜算式
看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数。 如果没有限定条件,这样的例子很多。 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次! 比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 1原创 2016-03-07 08:39:58 · 2390 阅读 · 0 评论 -
算法练习-连号区间数
问题描述 小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。输入格式 第一行是一个正整数原创 2016-03-08 09:49:14 · 1223 阅读 · 0 评论 -
剑指offer-从下往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路其实就是从上往下横着打印,即二叉树的层次遍历,初看到时想到用递归,但是递归是一层层的往下深入,没办法直接遍历兄弟结点,这里要想办法存储当前节点,然后打印出当前节点后,依次按顺序再往下从左到右打印,所以借助arraylist来模拟一个队列。public class Solution { public ArrayList<...原创 2019-02-24 18:53:43 · 157 阅读 · 0 评论 -
剑指offer-顺时针打印矩阵
顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.题目思路待求解的矩阵形状未知,可能是nxn,可能是nxm类型的,直接解法就是把矩阵看做四条边然后一个...原创 2019-02-18 17:55:39 · 188 阅读 · 0 评论 -
剑指offer-栈的压入、弹出序列
剑指offer-栈的压入、弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路最近几天的算法题和栈有关的都用到了辅助栈,这...原创 2019-02-23 19:33:49 · 134 阅读 · 0 评论 -
剑指offer-二叉树中和为某一值的路径
剑指offer-二叉树中和为某一值的路径题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路简而言之,就是求所有从根结点到叶子节点的和等于某个数的列表,然后再用一个大的列表将他们都包括进去。public class Soluti...原创 2019-02-27 18:42:24 · 124 阅读 · 0 评论 -
剑指offer-二叉树的镜像
剑指offer-二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...原创 2019-02-17 15:55:27 · 159 阅读 · 0 评论