![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
想成为小天才的小辣鸡
这个作者很懒,什么都没留下…
展开
-
leetcode数组的相对排序--计数排序算法
题目:计数排序法:以空间提升时间借助辅助数组来计数,一是记录下数组二的数在数组一中对应出现的次数,即频度;二是记录下数组一除了数组二的数以外其他数按序排序的结果。 遍历数组二,从辅助数组对应下标下取出对应频度个数字加入结果数组,完成这一遍遍历后,顺序输出辅助数组的非0值对应的下标,即完成排序。 代码分析小tips:新建辅助数组时,题目提示arr2.length <= 1000,但是不用建1001个数组空间,我们可以遍历数组1得出其最大值,新建(upper+1)个即可原创 2020-11-14 08:46:22 · 190 阅读 · 0 评论 -
leetcode买卖股票的最佳时期
这一系列问题的目录:题号 题解121. 买卖股票的最佳时机 暴力解法、动态规划(Java)122. 买卖股票的最佳时机 II 暴力搜索、贪心算法、动态规划(Java)123. 买卖股票的最佳时机 III 动态规划(Java)188. 买卖股票的最佳时机 IV 动态规划(「力扣」更新过用例,只有优化空间的版本可以 AC)309. 最佳买卖股票时机含冷冻期 动态规划(Java)714. 买卖股票的最佳时机含手续费 动态规划(Java)动态规划第 ...原创 2020-11-08 09:07:50 · 338 阅读 · 0 评论 -
leetcode单调栈题集--84、739、496、42
84、柱状图中最大的矩形解法:从左到右列出各高度多左边界数组,从右到左列出右边界数组,利用公式ans=Math.max(ans,(right[i]-left[i]-1)*heights[i]);得出答案。左边界数组的求解方法:我们遍历每个柱体高度,若当前的柱体高度大于等于栈顶柱体的高度,就直接将当前柱体入栈,否则若当前的柱体高度小于栈顶柱体的高度,说明当前栈顶柱体找到了右边的第一个小于自身的柱体,那么就可以将栈顶柱体出栈来计算以其为高的矩形的面积了。left[i]...原创 2020-10-26 09:44:24 · 179 阅读 · 0 评论 -
leetcode143. 重排链表
题目解法1:用快慢指针找出中间节点,l1=[head...mid],l2=[mid+1...last] ListNode mid = middleNode(head); ListNode l1 = head; ListNode l2 = mid.next; mid.next = null;反转l2,l2=reverseList(l2); 合并l1和l2,mergeList(l1,l2);class Solution...原创 2020-10-20 09:01:54 · 133 阅读 · 0 评论 -
【leetcode】n皇后问题--回溯法
题目解题思路总体思路:使用一个数组记录每行放置的皇后的列下标,依次在每一行放置一个皇后。同时增加约束条件,即新放置的皇后不能和任何一个已经放置的皇后在同一列以及同一条斜线上,并更新数组中的当前行的皇后列下标。当找到一个可能的解之后,将数组转换成表示棋盘状态的列表,并将该棋盘状态的列表加入返回列表。方法一:基于集合的回溯因为我们遍历每一行增加一个元素,所以保证啦每一行只有一个元素,我们需要增加三个数组,columns、diagonals1和diagonals2,分别表示每一列和两个.原创 2020-10-17 16:37:18 · 1464 阅读 · 0 评论 -
[leetcode]6. Z 字形变换
题目:解题:重点在于寻找坐标变化的规律,顺序遍历给定数组char s,设立行数currow个数组,根据规律找出该字符应该放在哪个数组c里面,找出该数组的下标。设立一个标志为godown,当godown=true时,表示数组下标+1,数组向下方向走;当godown=false时,表示数组下标-1,数组向右方向走;如何确定godown:初始化godown=false; if (curRow == 0 || curRow == numRows - 1) goingDown = !go原创 2020-10-10 15:28:55 · 95 阅读 · 0 评论 -
leetcode4:两个有序数组的中位数(复杂度最低)
题目:要求复杂度低,所以不能采取先合并数组再划分的方法。改进二分查找法:主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 进行比较 * nums1 中小于等于 pivot1 的元素有 nums1[0 .. k/2-2] 共计 k/2-1 个 * nums2 中小于等于 pivot2 的元素有 nums2[0 .. k/2-2]...原创 2020-10-08 19:49:55 · 152 阅读 · 0 评论 -
[leetcode75.]颜色分类
题目:解题分析:用双指针进行一次遍历,p0表示0子串的尾巴,p2表示2子串的头部遍历开始,i从数组的0开始,找到0,将p0移后一位,继续找;找到2,将2与p2交换,并且p2移前一位,同时i不能移动要循环验证a[i]是否为2,直至不是2,再移动。这个循环验证很重要,因为可能交换回来的依旧为2.class Solution { public void sortColors(int[] nums) { int n = nums.length; in原创 2020-10-07 15:28:07 · 66 阅读 · 0 评论 -
【leetcode5】最长回文子串,解题分析
问题:解题:1.动态规划破题点在于最长回文字符串去掉头尾依旧是回文。状态方程:P(i,j)=P(i+1,j−1)∧(Si==Sj),子串长度大于2P(i,i)=true,子串长度为1P(i,i+1)=(Si==Si+1),子串长度为2递归的思想class Solution { public String longestPalindrome(String s) { int n = s.length(); boolean原创 2020-10-06 19:49:58 · 130 阅读 · 0 评论 -
无重复字符的最长子串
题目:解答:1.最简单--暴力解法--复杂2.滑动窗口+哈希滑动窗口:以左指针开始的,不包含重复字符的最长子串,遇上重复从重复的下一个字符开始判断是否重复:常用的数据结构为哈希集合(即 C++ 中的 std::unordered_set,Java 中的 HashSet,Python 中的 set, JavaScript 中的 Set)。在左指针向右移动的时候,我们从哈希集合中移除一个字符,在右指针向右移动的时候,我们往哈希集合中添加一个字符。代码解法:HashSet:..原创 2020-10-03 16:45:57 · 217 阅读 · 0 评论 -
LCP 19. 秋叶收藏集(动态规划典型问题)
题目描述:解题过程这是一个动态规划问题,目标顺序是:红黄红状态标记列J=012表示红黄红三个状态i=元素列归纳递归式为:f[i][0]=f[i−1][0]+isYellow(i)//最初的红色状态前不能为黄色f[i][1]=min{f[i−1][0],f[i−1][1]}+isRed(i)//中间的红色状态前可以为黄色或红色f[i][2]=min{f[i−1][1],f[i−1][2]}+isYellow(i)//最后的红色状态前为黄色或红色但是不是0状态初始化状态.原创 2020-10-01 16:56:27 · 171 阅读 · 0 评论 -
leetcode117:填充每个节点的下一个右侧节点指针
题目解法递归法:左节点: root有左节点和右节点,则左节点的next为右节点 root右节点为null,则查找父节点的兄弟节点的最左边子元素 右节点:root右节点不为null,其next为父节点的兄弟节点的最左边子元素先构建右子树,再构建左子树,因为寻找父节点的兄弟节点是从左到右遍历的,如果右子树next没接上就遍历,会出错??c++class Solution {public: Node* connect(Node* root) {原创 2020-09-28 15:09:09 · 113 阅读 · 0 评论