![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hard
puspos
这个作者很懒,什么都没留下…
展开
-
41. 缺失的第一个正数
问题例子思路方法1众神归位方法2代码//方法1class Solution { public int firstMissingPositive(int[] nums) { if(nums.length==0) return 1; int i=0; while(i<nums.length) { ...原创 2020-04-11 09:57:24 · 74 阅读 · 0 评论 -
128. 最长连续序列
问题例子思路方法1暴力方法,先排序,再找最长的连续增长长度【每次增长1】,但是由于时间复杂度O(nlogn),超时方法2代码//方法1//方法2...原创 2020-04-03 22:28:05 · 91 阅读 · 0 评论 -
85. 最大矩形
问题例子思路highs长度为matrix.[0].length存储的是该行中每一个元素从第一行对应的相应元素到该行此位置连续的1的个数【该元素一定要是1】方法1方法2代码//方法1class Solution { public int maximalRectangle(char[][] matrix) { if(matrix.lengt...原创 2020-04-03 21:23:27 · 103 阅读 · 0 评论 -
84. 柱状图中最大的矩形
问题例子思路方法1 暴力法 O(n^2)计算以每一列为高的面积即分别向该列左和右进行查找,找到连续的列高>=该列高的长度,以此为宽方法2同方法1图,找到两个边界【边界<面积的高】,把要计算的面积给包起来,第一个和最后一个缺少边界,故在两边添加0使用一个递增栈【不会降,可相等】,保存每个高的下标,因为面积=高*宽,保存下标也可以得到宽遍历数组,...原创 2020-04-03 20:55:34 · 132 阅读 · 0 评论 -
42. 接雨水
问题例子思路方法1$$$$按列求【第一列和最后一列由于缺乏边界,不能存水】对于每一列i,i左边最高为h1,i右边最高为h2,h=Math.min(h1,h2)如果h>该列高,则该列存水:(h-列高)*宽=h-列高【宽为1】方法2$$$$代码//方法1class Solution { public int trap(int[] arr)...原创 2020-04-03 16:29:53 · 82 阅读 · 0 评论 -
72. 编辑距离
问题例子思路动态规划【最少操作数】方法1状态转移方程:dp[i][j] word1前长度i->word2前长度j的操作数初始时:dp[0][j]=j, dp[i][0]=idp[i][j]={dp[i−1][j−1] word1[i−1]==word2[j−1]1+min(dp[i−1][j−1],dp[i−1][j],dp[i][j−1)&nbs...原创 2020-04-02 21:16:52 · 78 阅读 · 0 评论 -
312. 戳气球
问题例子思路回溯时间太久【第一次有n个选择,第二次有n-1个选择,时间为O(n!)】动态规划【有最字】+分治区间[i, j] 戳破的气球为k。k戳破后,区间变成了[i, k) 和(k, j],即[i, i+1, … k-1, k+1, …j],那么k+1啥时候戳破对[i, k)的结果有影响,如果先戳破k-1,再戳破k+1,k-1的右边是k+1,计算时[k-2]*[k-1]*[k+...原创 2020-04-02 18:52:09 · 117 阅读 · 1 评论 -
297. 二叉树的序列化与反序列化_面试题37. 序列化二叉树
问题请实现两个函数,分别用来序列化和反序列化二叉树。例子思路中间转化成的字符串随意,只要最后能还原二叉树即可为空是,使用“#”代替中序遍历不行,因为没法知道根结点在哪【但是也可以通过在给右子树加括号来实现】方法1$$$$先序+队列方法2$$$$后序+栈方法3层次遍历序列化后的反序列化代码//方法1public class Co...原创 2020-04-02 17:12:47 · 125 阅读 · 0 评论 -
面试题51. 数组中的逆序对_315. 计算右侧小于当前元素的个数
问题例子思路暴力方法,两个for循环,超时方法1$$$$方法2$$$$代码//方法1//方法2原创 2020-04-02 11:11:32 · 153 阅读 · 0 评论 -
233. 数字 1 的个数_面试题43. 1~n整数中1出现的次数
问题例子思路暴力法超时(两个for)方法1$$$$方法2$$$$代码//方法1class Solution { public int countDigitOne(int n) { int res=0,i=1,num=n; while(num>0){ if(num%10==0) res+...原创 2020-04-01 21:56:04 · 105 阅读 · 0 评论 -
239. 滑动窗口最大值_面试题59 - I. 滑动窗口的最大值
问题例子思路方法1 暴力$$$$方法2$$$$代码//方法1class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length==0) return new int[0]; int[] res = new int[nu...原创 2020-03-31 20:56:46 · 114 阅读 · 0 评论 -
224. 基本计算器
问题实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。例子思路方法1中缀表达式->后缀表达式方法2代码//方法1class Solution { public int calculate(String s) { //获取后缀表达式(没有括...原创 2020-03-22 17:16:50 · 135 阅读 · 0 评论 -
23. 合并K个排序链表_合并k个数组
问题合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。例子思路方法1遍历链表数组,顺序取出链表和head合并方法2归并分治的方法,一次合并2i和2i+1,并放在i下标【如果为奇数lists[len/2]=lists[len-1]】最后返回lists[0]代码//方法1class Solution { publ...原创 2020-03-20 00:24:16 · 117 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III
问题给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。例子思路可化为两个子问题:收益[0:n] = max(一次买卖收益[0:i]+一次买卖收益[i:n]) 其中i 为 0->n;代码//粗糙class Soluti...原创 2020-02-28 20:12:30 · 77 阅读 · 0 评论 -
25. K 个一组翻转链表
问题给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。要求:空间复杂度 O(1)例子思路遍历链表,看有几个完整的组【k个为一组】创建一个新的链表,pre表头插法时的头结点,cur表尾插法时的尾结点,对完整的组,第一个元素使用尾插法,第2个到第k个使用头插...原创 2020-02-27 22:42:51 · 182 阅读 · 0 评论 -
145. 二叉树的后序遍历
问题给定一个二叉树,返回它的 后序 遍历。例子思路递归 左结点遍历->右结点遍历->添加val迭代 装Object的Stack 压栈顺序:new Integer(val)->右结点->左结点代码//递归class Solution { public List<Integer> postorderTraversal(TreeNode ...原创 2020-02-12 20:43:46 · 88 阅读 · 0 评论