自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

有图有真相

一言不合就上源码

原创 快速排序QuickSort(Java)

快速排序思想 如上图:每趟快速排序开始时,设置一个key,key=array[low],然后由high向左,找到小于key的值,复制到low位置,然后再由low向右找到大于key的值,复制到high位置,直到low=high结束, 将key的复制到low位置。 上图中第一轮划...

2017-03-31 09:43:45 12660 6

原创 堆排序HeapSort(Java)

堆排序堆排序思想:堆排序分为三个过程:①建堆:使得任一个节点的值大于左右孩子节点的元素因此堆顶的元素最大(大根堆)。②调整堆:删除掉堆顶元素后,还要保持堆的性质就要对堆进行调整。③堆排序:每次选择堆顶元素,并将堆顶元素删除,调整堆后,再重复操作直至堆为空。下面是这三种操作的具体过程:①建堆,建堆是...

2017-03-30 22:48:19 6413 3

原创 归并排序MergeSort(Java)

归并排序思想:先将数组中的每两个进行合并并且在合并的过程中进行排序,然后每四个进行合并。一直到数组合并完成。 例如上图中:要对数组中的元素:80、30、60、20、10、60、50、70进行排序,先把数组分成8组先分别对这八组进行合并排序,(30,80),(20,60),(10,60),(50,...

2017-03-30 22:01:28 2629 0

原创 剑指offer-丑数(Java)

题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路: 使用一个数组将之前已经求出来的丑数保存起来,然后依次用2,3,5乘上数组中已经求出来的丑数,选出其...

2017-03-27 22:11:43 2580 0

原创 剑指offer-把数组排成最小的数(Java)

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路: 数组中所有的数拼接后有可能会超过整数的范围,因此本题必须要使用字符串来处理。 要对3,32 ,32...

2017-03-26 22:28:56 3792 1

原创 剑指offer-求数组中最小的k个数

题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解法1(冒泡排序)冒泡排序每循环一次能够选出一个最小的数,题目要求选出最小的k的数,因此时间复杂度为O(k*N)。import java.util.ArrayLis...

2017-03-25 22:22:20 755 0

原创 Stack(5)对栈排序不用循环空间复杂度O(1)

对栈stack排序,不能使用循环while,for等,只能使用Stack的以下方法(Java版本)isEmpty():判断堆栈是否为空。 push(S):将新元素添加到堆栈。 pop(S):从堆栈中删除顶层元素。 peek(S):返回顶元素的值。例输入:-3 <---顶部 1...

2017-03-24 20:54:37 1251 0

原创 Stack(4)判断数组是不是二叉搜索树的前序遍历(递归及非递归实现)

给定一个数组,如果给定的数组是二进制搜索树的先序遍历结果,则返回true,否则返回false。时间复杂度为O(n)。 例子:输入: pre[] = {2, 4, 3} 输出: true 下面是上面数组对应的二叉搜索树 2 \ 4 / 3输入: ...

2017-03-24 16:40:00 752 0

原创 Stack(篇3)设计一个栈能够在O(1)的时间内getMin

问题:设计一个数据结构SpecialStack,支持所有的栈操作,如push(),pop(),isEmpty(),isFull()和一个附加的操作getMin()它应该从SpecialStack返回最小元素。SpecialStack的所有这些操作必须是O(1)。要实现SpecialStack,你应...

2017-03-23 22:17:00 563 0

原创 Stack(篇2)设计一个栈能在O(1)的时间和O(1)的空间getMin()

在上一篇文章中实现了 使用O(1)时间和O(n)的额外空间的方法getMin()。在本文中,讨论了一种支持O(1)额外空间的最新方法。 我们定义一个变量minEle,它存储堆栈中的当前最小元素。现在的问题是如何处理最小元素被删除的情况。为了处理这个,我们将“2x-minEle”推入堆栈而不是x...

2017-03-23 22:08:42 1065 0

原创 Stack(篇1)计算全排列大于等于其的自然数

有一些自然数,其所有排列大于或等于该数字,例如。123,其所有置换(123,231,321)都大于或等于123。 给定自然数n,任务是计数从1到n的所有这样的数。 例子:输入:N = 15 输出:14 1,2,3,4,5,6,7,8,9,11,12, 13,14,15是其所有的数字 排列比...

2017-03-20 17:29:29 746 0

原创 查找数组中3个相加和为零的元素

输入 : arr[] = {0, -1, 2, -3, 1} 输出: 0 -1 1 2 -3 1输入: arr[] = {1, -2, 1, 0, 5} 输出: 1 -2 1解法1(简单时间复杂复杂度O(n^3)空间复杂度O(1))public static void fin...

2017-03-19 21:28:18 5297 0

原创 Hash(篇1)实现一个函数来查找具有相同唯一字符集的所有单词

实现一个函数来查找具有相同唯一字符集的所有单词 例: 输入: words[] = { “may”, “student”, “students”, “dog”, “studentssess”, “god”, “cat”, “act”, ...

2017-03-19 11:23:53 630 0

原创 链表(篇8)给定链表及K将链表中的节点按小于K等于K大于K排列不改变它们原来次序

给定一个链表和值k,将其排序,使得小于x的所有节点首先,然后所有节点的值等于x,最后节点的值大于或等于x。应保留三个分区中的每一个中的节点的原始相对顺序。 例子:输入:1-> 4-> 3-> 2-> 5-> 2-> 3 x = 3 输出:1-...

2017-03-18 22:22:23 547 0

原创 链表(篇6)Floyd破圈法以及其改进方法检查删除链表中的环

检查给定的链表是否包含循环,如果循环存在,则删除循环并返回true。如果列表不包含循环,则返回false。下图显示了一个带有循环的链表。必须将以下列表更改为1-> 2-> 3-> 4-> 5-> NULL。思路: 要删除循环,我们需要做的是获取指向循环的最后一个节点...

2017-03-18 17:05:16 489 0

原创 链表(篇4)链表中的最长回文序列长度(O(1)额外空间)

给定一个链表,找出该链表中存在的最长回文表的长度。 例子:输入:List = 2-> 3-> 7-> 3-> 2-> 12-> 24 输出:5 最长的回文是2-> 3-> 7-> 3-> 2 Input:List = > 4...

2017-03-18 11:42:43 750 0

原创 链表(篇5)用链表实现多项式相加

使用链接实现两个多项式相加例:输入: 第一数目= 5x ^ 2 + 4x ^ 1 + 2x ^ 0 第二数= 5x ^ 1 + 5x ^ 0 输出: 5x ^ 2 + 9x ^ 1 + 7x ^ 0 输入: 第一数量= 5x ^ 3 + 4x ^ 2 ...

2017-03-18 10:42:31 3225 1

原创 二叉搜索树(篇1)判断数组是不是二叉搜索树后序遍历的结果

二叉搜索树(Binary Search Tree), 它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。上图中的二叉搜索树的后序遍历在数...

2017-03-18 10:05:17 904 0

原创 链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置

给定一个整数的链表,写一个函数来修改链表,使得所有偶数出现在修改链表的所有奇数之前。 此外,保持偶数和奇数的顺序相同。示例: 输入:17-> 15-> 8-> 12-> 10-> 5-> 4-> 1-> 7-> 6-> NULL 输...

2017-03-17 20:51:29 946 0

原创 位运算(篇1)不使用任何其他的数据结构检查一个字符串中是否有重复字符

实现空间有效算法以确定(从‘a’到’z’的字符)字符串是否具有所有唯一字符。不允许使用数组,散列等附加数据结构。 时间复杂度:O(n)思路: 因为从‘a’-‘z’共有26个字符,一个int有32位,如果将‘a’对应到int的第一位,‘b’放到第二位,只要判断从0到31位没有重复,字符串字符串中...

2017-03-17 10:59:02 1036 0

原创 链表(篇2)删除右侧有更大值的节点

给定一个单链表,删除右侧有更大值的所有节点。 示例: a)列表12-> 15-> 10-> 11-> 5-> 6-> 2-> 3-> NULL应该更改为15-> 11-> 6-> 3-> NULL。请注意,12,10,5...

2017-03-17 09:25:38 205 0

原创 链表(篇1)循环有序链表中插入节点

在循环有序链表中插入一个新值。例如:插入7之后算法: 为新插入的节点分配内存,并将数据放在新分配的节点中。让指向新节点的指针是new_node。在内存分配之后,以下是需要处理的三种情况。1)链接为空: a)因为new_node是循环链表中的唯一节点,所以进行自循环。 ...

2017-03-16 21:35:09 1494 0

原创 剑指offer-反转链表

题目描述 输入一个链表,反转链表后,输出链表的所有元素。解法1: 遍历链表的时候依次将每个指针指向前一个节点,这样遍历完时,正好所有的指针都反转,链表也反转。 代码: public ListNode ReverseList(ListNode head) { ListNod...

2017-03-16 20:23:45 490 0

原创 剑指offer-调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解法1:增加一个n维的数组,从后往前和从前往后同时遍历,从后往前时把偶数放在新数组的后面,从前往后时把奇数放在新数...

2017-03-16 19:35:18 172 0

原创 剑指offer-二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一...

2017-03-16 16:51:36 136 0

原创 二叉树的遍历(篇5)由中序和先序序列重建二叉树

让我们考虑下面的遍历:中序序列:DBEAFC 前序序列:ABDECF在Preorder序列中,最左侧的元素是树的根。所以我们知道’A’是给定序列的根。通过在Inorder序列中搜索’A’,我们可以发现’A’左侧的所有元素都在左子树中,右侧的元素在右子树中。所以我们现在知道下面的结构。 ...

2017-03-15 16:58:32 474 0

原创 二叉树的遍历(篇4)判断从根到叶节点的和是否等于某个给定的值

给定二叉树和一个数sum,如果从树的根开始到叶节点的值等于sum,则返回true。 如果没有找到这样的路径,则返回false。例如, 在上述树根到叶节点存在具有以下和。21 - > 10 - 8 - 3 23 - > 10 - 8 - 5 14 - > 10 - 2 -...

2017-03-15 16:12:23 875 0

原创 二叉树的遍历Java实现

使用Stack 遍历树而不递归。下面是使用堆栈遍历二叉树的算法。1)创建一个空栈S. 2)以root身份初始化当前节点 3)将当前节点推送到S,并设置current = current-> left,直到current为NULL 4)如果current为NULL,堆栈不为空 a)...

2017-03-15 15:23:33 756 0

原创 二叉树的遍历(篇2)计算二叉树节点的个数

树的大小是树中存在的元素的数量。下面的树的大小是5。使用 Size()函数递归计算树的大小。它的工作原理如下: 树的大小=左子树的大小+ 1 +右子树的大小算法:size(树) 1.如果树是空的,则返回0 2.否则 (a)递归获取左子树的大小,即调用 size(t...

2017-03-15 11:22:41 1451 0

原创 二叉树的遍历(Java)

树可以以不同的方式遍历。以下是遍历树的常用方法。深度优先遍历:(a)中序遍历(左、根、右):4 2 5 1 3 (b)先序遍历(根、左、右):1 2 4 5 3 (c)后序遍历(左、右、根) :4 5 2 3 1广度优先或水平顺序遍历: 1 2 3 4 5 先序遍历 算法Inorder...

2017-03-15 11:09:59 560 0

原创 Java中的Scanner类(篇1)

Scanner是java.util包中的一个类,用于获取原始类型的输入,如int,double等和字符串。它是在Java程序中读取输入的最简单的方法,但是如果您想要一个输入法用于其中时间是竞争性编程中的约束的情况下不是非常有效。要创建Scanner类的对象,我们通常传递预定义的对象System.i...

2017-03-15 08:58:31 640 0

原创 剑指offer-二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 本题有多种方法,这里只提供一种思路,从第一行开始由右向左找,第一个小于target值时就下一行从j开始向左找,...

2017-03-14 21:11:39 158 0

原创 华为机试-查找输入整数二进制中1的个数

题目描述 请实现如下接口 public static int findNumberOf1(intnum) { /* 请实现 */ return 0; } 譬如:输入5 ,5的二进制为101,输出2输入描述: 输入一个整...

2017-03-14 20:13:57 354 0

原创 华为机试-查找组成一个偶数最接近的两个素数

题目描述 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对 输入描述: 输入一个偶数输出描述: 输出两个素数输入例子: 20输出例子: 7 13代码import java.util.Scanner; p...

2017-03-14 19:33:41 204 1

原创 华为机试-找出字符串中第一个只出现一次的字符

题目描述 找出字符串中第一个只出现一次的字符输入描述: 输入一个非空字符串输出描述: 输出第一个只出现一次的字符,如果不存在输出-1输入例子: asdfasdfo输出例子: o代码import java.util.Scanner; public class FirstSingleChar...

2017-03-14 19:14:24 506 0

原创 动态规划(篇3)最长公共子序列(LCS)

LCS问题陈述: 给定两个序列,找出它们中存在的最长子序列的长度。子序列是以相同的相对顺序出现但不一定是连续的序列。例如,“abc”,“abg”,“bdf”,“aeg”,“acefg”,…等是“abcdefg”的子序列。因此,长度为n的串具有2 ^ n个不同的可能子序列。 示例: 用于输入...

2017-03-14 15:37:22 1528 0

原创 动态规划(篇2)最长递增子序列(LIS)

最长增加子序列(LIS)问题是找到给定序列的最长子序列的长度,使得子序列的所有元素以增加的顺序排序。例如,{10,22,9,33,21,50,41,60,80 }的LIS的长度为6,LIS为 {10,22,33,50,60,80}。最优子结构: 令arr [0..n-1]是输入数组,L(i)是以...

2017-03-14 10:09:40 11989 0

原创 动态规划(篇1)重叠子问题

动态规划是一种算法范例,通过将其分解为子问题来解决给定的复杂问题,并存储子问题的结果,以避免再次计算相同的结果。 以下是一个问题的两个主要属性,表明给定的问题可以使用动态规划来解决。 在这篇文章中,我们将详细讨论第一个属性(重叠子问题)。动态规划的第二个属性在下一篇文章即动态规划篇2中讨论。1)...

2017-03-14 09:23:55 3196 0

原创 Levenshtein distance最小编辑距离算法实现

动态编程| (编辑距离) 给定两个字符串str1和str2以及可以对str1执行的操作。找出将“str1”转换为“str2”所需的最小编辑次数(操作)。插入 删除 代替所有上述操作具有相等的成本。例子: 输入:str1...

2017-03-13 22:10:03 3403 3

原创 华为机试-输出单链表的倒数第k个字节

题目描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。 输入描述: 输入说明 1 输入链表结点个数 2 输入链表的值 3 输入k的值输出描述: 输出一个整数输入例子: 8 1 2 3 4 5 6 7 8 4输出例子: 5思路: 两个指针...

2017-03-13 20:49:18 242 0

提示
确定要删除当前文章?
取消 删除