力扣hot100—贪心算法&技巧9题
感觉贪心算法本质上也都是技巧和思路,需要脑子,和技巧栏目放一起。 买卖股票的最佳时机 有点类似DP。迭代每天的价格,更新当前遇到的最小价格和当前能得到的最大利润,最大利润就是p = Math.max(p, 今天价格-历史最小价格) 因为本题只能买一次,所以最大的利润肯定是出现在 过去 最小买入的时候。 class Solution { public…
|
|
力扣hot100—双指针 4题
移动0、盛最多水的容器、三数之和、接雨水。难度:2medium,2hard
|
|
剑指offer67题-No64.滑动窗口的最大值
超级重点题,感觉很经常考。 法1:优先队列用一个存储值和数组索引的pair放在优先队列里,当索引超出窗口范围,就把优先队列里的值删掉。 class Solution { public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { priority_queue&…
|
|
剑指offer67题-No56.删除链表中的重复节点
用哈希的方法比较简单,想想直接遍历的方法。 遍历链表,每次比较相邻两个节点,如果遇到了两个相邻节点相同,则新开内循环将这一段所有的相同都遍历过去。 在这一连串相同的节点前的节点,直接连上后续第一个不相同值的节点。 class Solution { public: ListNode* deleteDuplication(ListNode* pHead…
|
|
剑指offer67题-No55.链表中的入口节点
双指针算法 快慢指针,指针相遇的时候就是入口。证明如下: 设快指针的速度是慢指针的两倍,环之前有m个节点,环内有c个节点。当慢指针走了a步且两指针相遇时,快指针显然走了a+nc步(n表示快指针的绕环周期)。 再由先前的速度定义,有:2a = a+nc,即a = nc,说明慢指针此时,刚好走了n个环周期,只需要再走m步,就可以到达入口点了。再重置一个…
|
|
剑指offer67题-No41-42.和为S的连续正数序列、和为S的两个数字
双指针算法。 法1:直接枚举,从头到尾枚举区间,记录出某段区间的值,如果值==sum,把这段区间的值加入res中。时间复杂度为On√n(n根号n)。因为内层判断不会超过√n次(1+2+3+...+√n > n)。因此空间复杂度为O√n。 vector<vector<int> > FindContinuousSequence(int…
|
|