随笔分类 -  算法

摘要:Question: Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. Answer:public ... 阅读全文
posted @ 2016-04-14 18:09 小魔仙 阅读(251) 评论(0) 推荐(0)
摘要:题目: 给定一个无序单链表的头节点head,删除其中值重复出现的节点。 要求使用两种方法: 方法一:如果链表长度为N,时间复杂度达到O(N)。 方法二:额外空间复杂度为O(1)。 方法一: 利用哈希表。 public static void removeRep(Node head){ if(head==null) return; HashSet set=new HashSet(); ... 阅读全文
posted @ 2016-03-15 20:36 小魔仙 阅读(379) 评论(0) 推荐(0)
摘要:题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。 解答 使用栈结构 import java.util.Stack; public class Test{ static class Node{ public int val 阅读全文
posted @ 2016-03-15 18:04 小魔仙 阅读(393) 评论(0) 推荐(1)
摘要:题目: 给定一个无序单链表的头节点head,实现单链表的选择排序。 要求:额外空间复杂度为O(1)。 程序:public static Node selectionSort(Node head){ Node samll=null;//最小的节点 Node tail=null;//排序部分尾部 Node cur=head;//未排序部分头部 Node smallPre=null... 阅读全文
posted @ 2016-03-08 21:50 小魔仙 阅读(501) 评论(0) 推荐(0)
摘要:题目: 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点。给定这样一个环形单链表的头节点head和整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。 要求时间复杂度为O(N),额外空间复杂度为O(1)。 分析: 本题不算是很难,但是要注意最后返回头节点时要考虑到不同的情况。 有可能要插入的节点的值比头节点的值还小,此时返回的是要插入的节... 阅读全文
posted @ 2016-03-08 21:02 小魔仙 阅读(517) 评论(0) 推荐(0)
摘要:题目: 给定两个有序单链表的头结点head1和head2.请合并两个有序链表,合并后的链表依然有序,并返回合并后的链表的头结点。 例如: 0->2->3->7->null; 1->3->5->7->9->null; 合并后的链表为:0->1->2->3->3->5->7->7->9->null。 程序:public static Node merge(Node head1,Node head2){... 阅读全文
posted @ 2016-03-08 20:39 小魔仙 阅读(1668) 评论(0) 推荐(0)
摘要:题目: 给定一个单列表的头部节点head,链表长度为N,如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区。如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区。左半区依次记作L1->L2->…,右半区从左到右依次记为R1->R2->…,请将单链表调整成L1->R1->L2->R2->…的形式。 程序: class Test{ public sta... 阅读全文
posted @ 2016-03-08 17:50 小魔仙 阅读(221) 评论(0) 推荐(0)
摘要:题目: 分别实现反转单向链表和双向链表的函数。 要求: 如果链表长度为N,时间复杂度为O(N),额外空间复杂度要求为O(1)。 程序: 反转单向链表:public class Node{ public Node(int data){ this.value=data; } public int value; public Node next; } public static ... 阅读全文
posted @ 2016-03-07 17:52 小魔仙 阅读(1028) 评论(0) 推荐(0)
摘要:题目一: 给定链表的头结点,实现删除链表中间节点的函数。 思路: 基本解法: 先遍历一遍链表,计算出链表节点的个数。然后计算出中间节点的位置,再次遍历链表,找到中间节点的前一个位置,进行删除操作。 但是也可以只遍历一次就完成上述操作: 链表的长度 中间节点 的位置 1 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 … … 可以看出,链表的长度每增加两个节点,中... 阅读全文
posted @ 2016-03-07 12:56 小魔仙 阅读(387) 评论(0) 推荐(0)
摘要:题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。 解答: 让链表从头走到尾,每移动一步,就让K值减一,当链表走到结尾时,如果K值大于0,说明不用调整链表,因为链表根本没有倒数第K个节点,此时将原链表直接返回即可;如果K值等于0,说明链表倒数第K个节点就是头结点,此时直... 阅读全文
posted @ 2016-03-07 11:59 小魔仙 阅读(910) 评论(0) 推荐(0)
摘要:题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。 解答: 因为是有序列表,所以从两个链表的头开始进行如下判断: 如果head1的值小于head2,那么head1向下移动。 如果head1的值大于head2,那么head2向下移动。 如果二者的值相等,则打印这个值,然后head1和head2都向下移动。 head1和head2有任何一个移动到null,整个过程... 阅读全文
posted @ 2016-03-07 11:29 小魔仙 阅读(967) 评论(0) 推荐(0)
摘要:Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another expression. For example: ["2", "1", "+", "3", "*"]... 阅读全文
posted @ 2016-02-19 17:32 小魔仙 阅读(309) 评论(0) 推荐(0)
摘要:You may have been using Java for a while. Do you think a simple Java array question can be a challenge? Let's use the following problem to test. Problem: Rotate an array of n elements to the right by... 阅读全文
posted @ 2016-02-19 17:17 小魔仙 阅读(386) 评论(0) 推荐(0)
摘要:Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases... 阅读全文
posted @ 2016-02-17 00:00 小魔仙 阅读(295) 评论(0) 推荐(0)
摘要:题目: 给定一个无序整型数组arr,找到数组中未出现的最小正整数。 例如: arr=[-1,2,3,4]。返回1。 arr=[1,2,3,4]。返回5。 要求时间复杂度为O(N),空间复杂度为O(1)。 解答: 在遍历arr之前先生成两个变量。变量l表示遍历到目前为止,数组arr已经包含的正整数范围是[1,l],所以在没有开始之前l=0,表示arr没有包含任何正整数。变量r表示遍历到目... 阅读全文
posted @ 2016-02-15 01:11 小魔仙 阅读(1753) 评论(0) 推荐(1)
摘要:题目: 给定一个整形数组arr,返回排序后的相邻两数的最大差值。 时间复杂度为O(N)。 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N),额外空间复杂度为O(N)。遍历arr找到最大值max和最小值min。如果arr的长度为N,准备N+1个桶,把max单独放在第N+1个桶中,[min,max)范围上的数放在1~N号桶里,对于1~N号... 阅读全文
posted @ 2016-02-15 00:08 小魔仙 阅读(4695) 评论(0) 推荐(0)
摘要:题目: 用一个整形矩阵matrix表示一个网络,1代表有路,0代表没路,每一个位置只要不越界,都有上下左右4个方向,求从最左上角到最右下角的最短通路值。 例如: 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 0 0 1 通路只有1条,由12个1组成,... 阅读全文
posted @ 2016-02-14 23:22 小魔仙 阅读(1272) 评论(0) 推荐(0)
摘要:题目一: 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复部分且升序,而不用保证右部分是否有序。 例如:arr=[1,2,2,2,3,3,4,5,6,6,7,7,8,8,9,9],调整之后arr=[1,2,3,4,5,6,7,8,9…]。 要求: 时间复杂度O(N),额外空间复杂度O(1) 程序:public static void leftUnique(int[] arr) { ... 阅读全文
posted @ 2016-02-14 22:45 小魔仙 阅读(777) 评论(0) 推荐(0)
摘要:题目: 给定一个整型数组,返回不包含本位置的累乘数组。 例如:arr=[2,3,1,4],返回[12,8,24,6],即除自己外,其他位置的类乘。 要求: 1.时间复杂度为O(N). 2.除需要返回的结果数组之外,额外空间复杂度为O(1). 使用除法: 结果数组记为res,所有数的乘积记为all。如果数组中不含0,则设置res[i]=all/arr[i]。如果数组中有一个0,对唯一的arr[i]=... 阅读全文
posted @ 2016-02-14 20:23 小魔仙 阅读(454) 评论(0) 推荐(0)
摘要:题目: 给定一个N*N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度。 例如: 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 1 0 1 0 1 1 其中边框全是1的最... 阅读全文
posted @ 2016-02-14 18:55 小魔仙 阅读(1031) 评论(0) 推荐(0)