
数据结构与算法
文章平均质量分 69
Difstpoftf
这个作者很懒,什么都没留下…
展开
-
leetcode 2. Add Two Numbers (linked lists)
题意:给你两个链表,代表两个整数(头为低位,尾为高位),让你对这两个数,进行加法运算,并以相同的形式存在链表中。思路:从头部同时遍历,把两个值加起来存到新链表中,注意考虑最后剩一个进位的情况,,///现在开始使用java刷题,熟悉一下java,,不知道定义一个对象时必须要new,,和c++不一样啊=。=,,类里的ListNode next没有生成对象,,不new而直接 temp = t原创 2017-10-28 13:54:52 · 210 阅读 · 0 评论 -
218. The Skyline Problem (最大堆)
题意:给你一堆建筑的左右边界和高度,让你求其映射到坐标系后,所有有效的拐点(详情看原题)思路:用线性表维护每个建筑的左右边界坐标,按横坐标升序排序后遍历,遍历时用最大堆维护某横坐标上存在的高度,pre记录未处理当前点时可选的最大高度,cur记录处理完当前点后可选的最大高度。如果pre!=cur说明存在有效拐点java代码:class Solution { public原创 2017-11-24 20:50:29 · 210 阅读 · 0 评论 -
240. Search a 2D Matrix II(二分查找)
题意:给你一个二位数组,对于每行,元素是递增的,对于每列,元素是递增的,让你从中查找某个值。思路:如果从左上角开始查找,那么不匹配时,下个查找位置是不确定的,因为右边和下边都大于该值,同理右下角也不能作为查找起点。所以可以从左下角开始查找,当目标值大于该值,说明目标值永远不可能存在于该列,所以下一个查找位置为列数+1;如果目标值小于该值,说明目标值永远不可能在该行,所以下一个查找位原创 2017-11-23 10:39:47 · 198 阅读 · 0 评论 -
leetcode 95. Unique Binary Search Trees II(dp)
题意:给你n个结点,求所有不同形态的二叉搜索树(BST)。思路:枚举每个结点作为根节点时的BST,对于每个根节点,枚举所有不同形态的左子树和右子树,根据BST的定义,左子树和右子树必须也是BST,那么求不同形态子树时又可以用同样的方法,这就成了求解子问题(dp)题目。由于这题给的数据是1~n的整数,所以当i为根节点时,左子树的值有小于i(即1~i-1),同理右子树为(i+1~n);原创 2017-12-08 21:16:13 · 259 阅读 · 0 评论 -
leetcode 96. Unique Binary Search Trees (dp)
题意:是leetcode 95. Unique Binary Search TreesII的简单版,95题需要存储每棵树的结构,本题只需要计算所有树的个数。思路:因为只需计算个数,所以1~n的所有BST的总数和2~n+1的所有BST的总数是相同的,即结点个数一致的所有可能的BST数相是固定的。由上一题的思路,dp[n]就等于N个结点都作为根节点时可能的BST个数之和。java代码:原创 2017-12-10 11:24:27 · 217 阅读 · 0 评论 -
215. Kth Largest Element in an Array(快排的分治思想)
题意:给你一个无序的数组,让你求第k大元素;思路:比较简单的是利用最小堆(优先队列)保存前k大的元素,最后返回堆顶即可。还有一种方法是利用快排分治的方法,判断每次确定的键值是不是所求的元素;是的话结束递归返回答案,不是的话:1.键值是第x大元素(x>k),此时所求元素在键值的右边,继续在右边区间递归。2.键值是第x大元素(xjava代码:class Soluti原创 2017-11-22 14:44:24 · 247 阅读 · 0 评论 -
leetcode 10. Regular Expression Matching(Backtracking)
题意:给你一个字符串s,s串只含字母。给你一个字符串p,不仅含有字母,还含有'.'和'*’;'*'的作用是可以使其前一个字符的数量任意变化(可以为0);'.'的作用是可以替换为任一字母;问你这两个字符串能不能完全相同思路:因为s串是固定,所以只需要讨论p串可能的变形,如果p串长度大于1,则考虑要匹配的字符的下一个字符是不是'*',不是'*'则直接匹配当前字符;否则直接跳原创 2017-12-01 11:04:07 · 269 阅读 · 0 评论 -
leetcode 34. Search for a Range (二分查找)
题意:给你一个可能有重复元素的上升序列,让你找出目标值所在的下标范围,如果不存在则返回【-1,-1】;思路:先来一个二分查找,看能不能找到目标值,如果找不到则不存在,如果找到了,记录下标为pos;然后在区间【0,pos】二分找左边界,在区间【pos,nums.length-1】二分找右边界;但是这两个二分的写法稍有不同。对于找左边界:所找目标值要尽量往左,因为mid的求原创 2017-11-16 10:22:32 · 321 阅读 · 0 评论 -
leetcode 33. Search in Rotated Sorted Array (复杂二分查找)
题意:给你一个无重复元素的递增数组,这个数组后来被左移或者右移了未知步数,形成新的数组,让你找到target所在位置,如果不存在则返回-1;思路:同样可以使用二分查找,但是要考虑多种情况。情况首先分为两大类:1.中间元素大于等于左边界的值,(说明从左到中间是绝对递增的。2.中间元素小于左边界的值(说明从中间到右边是绝对递增的。然后每种情况考虑target值的可能位置即可原创 2017-11-15 11:22:36 · 202 阅读 · 0 评论 -
leetcode 154. Find Minimum in Rotated Sorted Array II(二分+递归)
题意:给你一个可能存在重复元素的数组,刚开始是递增的,但是后来经过了左移或者右移。让你用二分求最小值。思路:之前的Find Minimum in Rotated Sorted Array是不含重复元素的,只需判断mid值是否大于r值即可确定下一个二分区间。如果含重复元素,但是左边界和右边界不相等时,同样可以只需判断mid值是否大于r值即可确定下一个二分区间。但是当左边界和右边界原创 2017-11-17 11:26:58 · 220 阅读 · 0 评论 -
leetcode 42. Trapping Rain Water
题意:给一个 由多个矩形组成的容器,问能最多接多少雨水,思路:对于每个矩形,他能接的雨水的数量,取决于左右最高矩形,如果当前矩形的高度比左右最大高度分别都小,那么必能接到水。java代码1:///比较好理解,开两个数组,分别表示当前位置左右矩形的最大高度。class Solution { public int trap(int[] height) { i原创 2017-11-11 11:53:40 · 173 阅读 · 0 评论 -
leetcode 61. Rotate List
题意:按要求右移一个链表。思路:一开始想的是按照右移字符串的思路,倒置三次链表/////http://blog.youkuaiyun.com/zzran/article/details/8456721后来发觉,其实只要找到右移后新的表头,然后把链表重新连接一下就行。java代码:class Solution { public ListNode rotateRight(ListN原创 2017-11-08 15:44:00 · 182 阅读 · 0 评论 -
leetcode 23. Merge k Sorted Lists (分治法)
题意:给你k个有序的链表,让你合并成一个有序的链表。思路:直接一个一个合并的话,耗时448ms,超时了,对于这种方法,最先合并的数据可能会多次和后面的数据进行比较,这大大浪费了时间,运行时间会大于n^3。运用分治的方法,如果分成两组两组比较,合并好的数据之间就不会在进行比较,大大减少了比较的次数,运行时间最高为logn*n^2。//java是完全的面向对象编程,不能在类外定义函数,原创 2017-10-28 15:07:53 · 276 阅读 · 0 评论 -
leetcode 19. Remove Nth Node From End of List (Linked list)
题意:给你一个链表,让你删除倒数第n个数据。时间复杂度为O(n);思路:建立一个快指针和一个慢指针,快指针先向前n次,慢指针不动,之后一起向前,当快指针移动到末端,慢指针所处的位置就是要删除的数据的位置。注意处理删除最后一个数据和第一个数据的特殊情况。java代码:class Solution { public ListNode removeNthFromEnd(L原创 2017-10-28 14:15:19 · 288 阅读 · 0 评论 -
leetcode 41. First Missing Positive
题意:给你一个乱序的数组,让你找出第一个缺失的正整数(原数组可能包含0和负整数),思路:题目要求时间复杂度为O(n),空间复杂度为O(1),所以只能借助原数组的空间来求解,很容易想到用下标来标记有没有出现。即把出现过的整数的对应的下标的值变为负值,但原数组有负数和0干扰(当一个值为负时,不知他是原数组的初始值,还是标记后的值;0的负数依然是0)又因为,缺失的数必定小于等于数组的原创 2017-12-25 11:02:15 · 254 阅读 · 0 评论