Leetcode
数据挖掘者
热爱大数据,对算法感兴趣,博客里写我对算法的理解。
展开
-
Leetcode 6 ZigZag Conversion
一,问题描述 ZigZag问题可以举个例子: 当输入原字符串和行数后,求ZigZag后的字符串。二,通过上述观察,我们总结一下 1,当rows=3时,0,1,2,3组成的长度是2*rows-2(即长度为4)。 当rows=4时,0,1,2,3,4,5组成的长度为2*rows-2(即长度为6)。 因此,每一轮的长度为size=2*numRows-2。2,除了第一行原创 2016-09-20 17:05:16 · 326 阅读 · 0 评论 -
Leetcode 76 Minimum Window Substring(最小窗口的子串)
一,问题描述:1,给定一个字符串S和一个字符串T,在S中找到最短的窗口,该窗口包括字符串T中所有的字符,该时间复杂度为O(n)。 2,举个例如: S=”ADOBECODEBANC” T=”ABC” 输出: BANC。s=”ABCDEFEFEFDCA” t=”ACD” 输出: DCA3,解题思路: 总体思想就是先扫描一遍找到最后一个元素满足t字符串的,然后从原创 2016-10-30 15:03:19 · 700 阅读 · 0 评论 -
Leetcode 239 Silding Window Maximum(滑动窗口的最大值)
一,问题描述 1,给定一个整数数组nums 和一个正整数k的滑动窗口,滑动窗口每次从左到右移动一个数字,返回每次滑动窗口中的最大值。2,例如: 输入: nums=[1,3,-1,-3,5,3,6,7] k=3 输出: 3, 3 ,5, 5,6 ,73,解题思路: 首先判断数组的长度len与k的大小,如果len<=k,则,只要找出数组nums中最大的那个值,直接返回原创 2016-10-30 17:06:12 · 1214 阅读 · 0 评论 -
Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
一,问题描述1,1,给定一棵二叉树,从上到下,进行Z字行分层遍历的,即:本层的话从左打到右,那么下层就是从右到左,最后输出结果。2,例如: 3,解题思路: 这题和第102题解法类似,对102题的方法进行改造,使用两个Deque来实现,第一个Deque()实现本层的遍历,第二个Deque()实现下层节点的输入。二,AC了的程序(采用Java程序)import java.util.*;cl原创 2016-11-15 22:08:50 · 578 阅读 · 0 评论 -
Leetcode 78 Subsets(打印全部子集)
一,问题描述1,给定一个整数集合(集合元素具有相异性),求出所有的子集合。 2,例如给定集合为[1,2,3] 输出: [3] [1] [2] [1 2 3] [1, 3] [2 ,3] [1, 2] []3,解题思路: 使用位操作,不使用递归。首先,计算一下该数组nums一共有多少个子集,设数原创 2016-11-01 16:06:42 · 1265 阅读 · 0 评论 -
Leetcode 90 Subsets II (打印不重复的子集)
一,问题描述:1,给定一个整数集合(集合元素具有相异性),求出所有的不重复的子集合。并且子集里<1,2>和<2,1>属于重复了的2,例如: nums=[1,2,2] 输出: [] [2] [1] [1,2,2] [2,2] [1,2]3,解题思路: 这题和第78题的思路一样的(在我的博客里有第78题的解),首先对集合进行排序,使用sort(nums),然后和78题的方法一样(使原创 2016-11-01 18:58:14 · 678 阅读 · 0 评论 -
LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)
一,问题描述: 1,给定一棵二叉树,返回它的层次遍历。 2,例如: 3,解题思路: 使用LinkedList queue=new LinkedList()。因为LinkedList具有队列的性质,即先进先出规则。然后统计每一层的节点个数,然后在每层从左到右输出节点。二,AC了的程序(使用Java实现的)import java.util.*;class TreeNode{ //节原创 2016-11-15 20:17:50 · 736 阅读 · 0 评论 -
Leetcode 115 Distinct Subsequences(不同的子序列)
一,问题描述 1,给出两个字符串S和T, 计算S中T的不同的子序列的个数,(S>=T)。一个字符串的子序列是由一个原始字符串通过删除一些字符(也可以不删除),但是不改变剩下字母的相对顺序的一个新字符串。如,ACE是ABCDE的一个子序列,但是AEC不是一个子序列的。2,例如: S=rabbbit, T=rabbit 返回: 33,解题思路: 这是一道用动态规划解答的题原创 2016-11-27 19:34:47 · 873 阅读 · 0 评论 -
Leetcode 150 Evaluate Reverse Polish Notation (求值逆波兰表达式)
一,问题描述 1,用逆波兰表达式法去计算算术表达式的值。其中,有效运算符为+,-,*,/。每个操作数可以是整数或者另一个表达式2,例如: 3,解题思路: 先定义一个栈用来存放数据的,然后对字符串数组进行从左到后进行扫描,如果遇到的是字符串符号(+,-,*,/),则从栈中取出两个整数进行符号操作的,再把结果放回栈中,如果遇到的是字符串整数,直接存放在栈中去,一直到字符串数组全部扫描完。二,A原创 2017-03-17 21:18:11 · 675 阅读 · 0 评论 -
Leetcode 164 Maximum Gap (最大差距)
一,问题描述1,给一个没有排序的数组,当排序后找出连续两个元素之间相差最大的数,并且输出这个数。2,限制条件: 需要在线性的时间和空间复杂度。如果数组长度小于2,则输出0。数组中的所有数为非负数。3,解题思想: 由于时间复杂度为O(n),因此利用到了桶排序算法。桶排序算法网上很多参考资料的。它基本思想就是是将一个数据表分割成许多个bucket(桶),然后每个bucket可以各自排原创 2017-03-18 21:51:35 · 1244 阅读 · 1 评论 -
Leetcode 179 Largest number (最大的数字 和最小的数字)
一,问题描述1,给出一组非负整数,求这些非负整数可以拼接出的最大数字 2,例如,给出数组[3,30,34,5,9] ,拼接出的最大数字为9534330. 3,由于本题输入时一个整型数组,输出是一个字符串。因此,在输出前,可以考虑到数组进行一下排序。4,解题思路(求最大的数字的解题思路,求最小的数字的解题思路和求最大的数字的解题思路类似的): 先把数组转化成字符串数组,然后两两拼接进行原创 2017-03-22 23:09:06 · 947 阅读 · 0 评论 -
Leetcode 147 Insertion Sort List(插入排序列表)
一,问题描述1,使用插入排序方法来对单链表进行排序2,解题思路: 为了使得插入结点更加方便点,我们在单链表的头结点增加一个新结点(该新结点作为第一个结点)。然后,从第二个结点与下一个结点进行比较,如果下一个结点小于第二个结点的话,则把下一个结点从单链表取下,然后插入到第二个结点之前的已经排序好的结点中取,依次类推。最终使得单链表有序。二,AC了的程序(Java实现的)1, 第一种方法i原创 2017-03-15 21:44:10 · 603 阅读 · 0 评论 -
Leetcode 268 Missing Number
一,问题描述 1,给定一个数组,包含n个不同的数字,从0,1,2,3,…,n中,找到数组中缺少的那个数。2,例如 [0,1,3] 输出2输入: [0, 1 ,2 ,4] 输出3 输入:[1, 0] 输出 23,解题思路 这题要注意,就是数组可能是无序的,所以首先排序一下。然后从左到右开始扫描,如果碰到数组的元素不等于该元素的下表,直接把该元素等于数组原创 2016-10-18 22:21:10 · 339 阅读 · 0 评论 -
Leetcode 50 Pow(x,n) (求x的n次方)
一,问题描述: 1,给定一个double类型,int类型的n。求x的n次方。 2,输入:2.00000 -2147483648 输出: 0 输入:3 4 输出:813,解题思路: 采用分治法:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立于原问题性质相同,求出子问题的解。x的n次方是分治法的一个典型的例子。原创 2016-10-26 19:46:45 · 1868 阅读 · 0 评论 -
LeetCode 第十九题 Remove Nth Node From End of List
一,问题描述 1,删除一个单链表末尾开始算起的第n个结点,然后返回该单链表。 2,例如: 输入: 1->2->3->4->5 其中n=2; 输出: 1->2->3->5; 3,解题思路: 给定两个临时结点指向头结点head,设为p和q,先让p往前先走n个结点,然后p和q同步往前走,直到p的下一个节点为空集为止,那么q的下一个节点就是要被删除的节点。使用另外一个节点no原创 2016-10-09 22:04:30 · 291 阅读 · 0 评论 -
Leetcode 第十二题 Integer to Roman
一,Integer to Roman(整数转化为罗马数字) 1, 问题描述: 给定一个整数(范围为[1,3999]),然后转化为一个罗马数字。求出这个罗马数字。2, 罗马数字的描述: 第一,罗马数字最基本的有五个: I, II , III, IV , V分别代表数字1,2,3,4,5 第二,还有七个基本罗马字符: I: 1 V: 5 X: 10 L: 50原创 2016-09-26 19:27:12 · 512 阅读 · 0 评论 -
Leetcode 54 spiral matrix II (螺旋矩阵)
一,问题描述1,给定一个数n,以螺旋顺序产生一个具有n*n个元素的正方形矩阵。2,格式如下: 输入: 3 输出: [1 2 3] [8 9 4] [7 6 5]输入:4 输出:[1 2 3 4] [12 13 14 5] [11 16 15 6]原创 2016-10-22 17:00:40 · 550 阅读 · 0 评论 -
LeetCode 第十三道题 Roman to Integer
一 , Roman to Integer(罗马数字转换成整数) 1,问题描述: 给定一个罗马数字,要求转成成整数(该整数的范围为[1~3999]2, 罗马数字的描述: 第一,罗马数字最基本的有五个: I, II , III, IV , V分别代表数字1,2,3,4,5 第二,还有七个基本罗马字符: I: 1 V: 5 X: 10 L: 50 C: 100原创 2016-09-26 22:10:30 · 308 阅读 · 1 评论 -
LeetCode 第25题 Reverse Nodes in k-Group
一 ,问题描述 1,题目的意思是将链表进行部分逆置,逆置的部分跟K值有关。 2,如上所示, 对于 1->2->3->4->5 当k=1时,输出:1->2->3->4->5 当k=2时 , 输出: 2->1->4->3->5 当k=3时 ,输出: 3->2->1->4->5 其中 后面 4 5没变是因为做完一次 3 2 1 剩下的 4 5 已经比k小了,所以保持原来的顺序3,解原创 2016-10-12 17:39:45 · 459 阅读 · 0 评论 -
LeetCode 第十四题 Longest Common Prefix(最长公共前缀)
一,Longest Common Prefix(最长公共前缀) 1,问题描述: 写一个函数,在一个字符串数组中查找最长的公共前缀。2,最长公共前缀,例如 在”ABCD”, “ABEF”, “ACEF”中, 最长公共前缀为A 在”ABCDEFG”, “ABCEFG” , “ABCEFA”中,最长公共前缀为”ABC”3,这题解题思路 首先判断给定的字符串数组中,如果数组的原创 2016-09-27 11:33:32 · 531 阅读 · 0 评论 -
Leetcode 57 Insert Interval
一,问题描述:1,给定一个区间集合,这些区间有些是重合的。另外给一个区间,然后把这些区间,进行合并有重叠的区间2,例如: 给定一个区间集合: [1 3] [6 9] 再给一个区间[2 5] 输出: [1 5][6 9]给定一个区间集合:[1 2][3 5][6 7][8 10][12 16] 再给一个区间[4 9] 输出: [3 5][6 7][8 10]3,解题思路原创 2016-10-24 12:32:46 · 301 阅读 · 0 评论 -
LeetCode 第十五题 3Sum
一,问题描述: 1,给定一个长度为n的整数数组,从中寻找三个元素a,b,c,使得a+b+c=0;把这三个元素组成一个数组输出来。 2,输入和输出的格式如下: For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]3,解题思路: 这题不原创 2016-09-29 09:37:43 · 680 阅读 · 0 评论 -
Leetcode 96 Unique Binary Search Trees(独一的二叉搜索树)
一,问题描述 1,给定一个n,返回所有的二叉搜索树的总数。2,例如: 输入:n=4 输出:14输入:n=3 输出:5输入:n=5 输出:42输入:n=6; 输出:132输入: n=2 输出: 2输入:n=9 输出: 4862输入: n=10 输出: 16796输入:n=11 输出:587863,解题思路:其中一种方法可以使用卡特兰数来解决,由于这题返回值是int类型的。所以,我们原创 2016-11-05 13:23:53 · 307 阅读 · 0 评论 -
LeetCode 31 Next Permutation (下一个排列)
一,问题描述 1 ,实现”下一个排列“函数,将排列中的数字重新排列成字典序列中的下一个更大的排列。如果这样的重新排列是不可能的,它必须重新排列成可能的最低顺序(即升序排序) 重排必须在原地,不分配额外的内存。 以下是一些示例,左侧是输入,右侧是输出: [1 2 3] —>[1 3 2] [3 2 1]—>[1 2 3] [1 3 3]—->[3 1 3] [1原创 2016-10-15 21:33:01 · 629 阅读 · 0 评论 -
LeetCode 46 Permutations
一,问题描述 1,给定一个不同的数字的集合,返回所有可能的排列。 输入1 2 3 输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1( 当如n个数, 那么一共有n!种不同的排序,例如n=4 ,那么total=2原创 2016-10-16 10:26:27 · 260 阅读 · 0 评论 -
Java 求逆波兰式的值
一,给一个逆波兰式的公式,求出它的值1, 该公式运算符只有^, + ,* 这三个,其中^表示自增的。2,例如输入: 1 1 + 2 ^ * 输出为6;二,程序import java.util.*; //阿里的程序题public class Test2 { public static void main(String[] agrs) { ArrayList<I原创 2017-04-26 22:23:24 · 788 阅读 · 0 评论