![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
记录LeetCode刷题
bblctq
这个作者很懒,什么都没留下…
展开
-
单调栈 (Leetcode 503)
题目:给定一个循环数组,求数组中每一个元素的下一个更大的元素。若元素为数组中最大的,则输出-1。例:给定数组[1,2,1],则结果为[2,-1,2]。思路:采用单调栈来解决,时间复杂度为O(n)。单调栈存储的是数组中元素的下标。单调栈的更新如下:栈为空,则直接将元素下标压入栈内;若要入栈的元素不大于栈顶元素,则元素直接入栈;若要入栈的元素大于栈顶元素,则把栈顶元素出栈,并且其下一个更大的元素就是要入栈的元素。以样例为例:设返回结果为ans,给定数组为nums单调栈更新过程:1. push原创 2021-03-06 22:13:45 · 133 阅读 · 0 评论 -
环形链表 II
题意:给定一个链表,若该链表为环形链表,则返回链表入环的第一个节点,若不是,则返回NULL。思路:假设链表为环形链表,设两个指针:快指针与慢指针。其中,快指针一次走两个节点,慢指针一次走一个节点。因为链表为环形链表,则两个指针一定会在某一刻于环形中的某一点相遇。则有如下示意图:其中,a为链表头节点到环形入口的距离,b为环形入口到相遇点的距离,c为相遇点到环形入口的距离。设相遇时,慢指针走了n次环形,快指针走了m次环形。则慢指针总共走了,快指针走了。因为快指针一次走的距离是慢指针的两倍原创 2020-10-25 16:10:21 · 73 阅读 · 0 评论 -
颜色分类(双“指针”)
题意:给定一个只包含0,1,2的数组,要求对这数组进行排序思路:一个简单的思路:记录数组中0,1,2的个数,之后对数组进行重新赋值。该思路需要两次遍历。下面介绍一下只进行一次遍历的方法:采用双“指针”,设立变量index0和index2记录0和2的位置。即区间都为0,区间都为2,其中len为数组长度。index0的初值为0,index2的初值为len-1先做如下设定:输入数组nums,当前遍历位置nums[i]解题策略如下:1.nums[i] == 0时,nums[i]与nums[ind原创 2020-10-07 17:07:28 · 135 阅读 · 0 评论 -
树中距离之和(树形dp)
题意:给定一个含有n个节点的树,求各个点到其他点的距离之和。返回一个vector。举例:假设返回vectot<int> ans。则ans[0] = dist(0,1) + dist(0,2) + ...+ dist(0,n)思路:树状dp。设数组dp[],dp[root]为其他点到点root的距离之和;数组nodes[],nodes[root]为以点root为根节点的节点数。则更新公式为:dp[u] =...原创 2020-10-07 14:24:37 · 738 阅读 · 0 评论 -
四数之和
题意:给定一个有N个元素的整数数组nums和一个整数target。求数组中四个元素之和等于target的组合,要求组合不能重复。思路:首先对数组进行排序,因为要保证组合不能重复。设立四个“指针”a,b,c,d。其中a,b固定在数组最开头,c = b+1,d位于数组末尾,之后通过移动指针c和d使得nums[a],nums[b],nums[c],nums[d]之和等于target。当指针c和d重合时表明,以nums[a],nums[b]为开头的组合已经寻找完毕。所以移动指针b,当指针b移至末尾再移动指.原创 2020-10-06 15:22:52 · 89 阅读 · 0 评论