算法
脱水星球
这个作者很懒,什么都没留下…
展开
-
[Python] [LeetCode] [每日一题] 1011. 在D天内送达包裹的能力
题意:有一艘货轮在D天内往返于A B港口运送货物,货物重量的序列为weights(不可改变顺序),求一个最小的货轮载重能力,使得货轮能够在D天内运送完所有货物。思路:第一反应是二分答案,因为载重能力越强,所需时间越少。考虑是否能O(n)检查答案。对于货物x,假如可以在当天装上货轮,那么留到第二天装上货轮一定不比当天装货优,因此直接扫描序列,每一天尽可能装更多的货物,检查D天内是否能装完。复杂度O(nlog(n*weight))class Solution: def shipWithinDay原创 2021-04-26 19:20:11 · 181 阅读 · 0 评论 -
[Python] [LeetCode] 22. 括号生成 最优美的暴力
我也不知道该怎么形容,我见过最优美而简洁的搜索方法。这就是暴力美学吧。不用额外的剪枝,直接通过状态上的定义就可以去重。至于为什么要这么定义,我们分析以下状态:假设我们现在有一个有效的括号序列s[n-1],该括号序列有n-1对括号,要生成具有n+1对括号的有效序列,我们只能合法的加上一对括号,具体来说有三种情况:(s[n-1]) s[n-1]() ()s[n-1]这三种情况都可以被以下格式概括:(s[n-1])s[0] (s[n-2])() ()s[n-1]其余的解释我只能想到排除法:介于递推原创 2021-04-11 23:27:33 · 123 阅读 · 0 评论 -
[Python] [LeetCode] 456. 132模式
单调队列变体注意到132模式中32为时序上有序,联想到单调队列由于枚举1的时候需已经计算过32,因此反向遍历靠近1的要足够高,因此维护从栈底到栈顶的单增序列加入任意元素至栈中时,弹出小于它的元素。此时可以将弹出的元素看做2,当前的元素看做3,只要是被弹出的元素,必定是被一个更大的元素所弹出,切该元素必定在被弹出元素的前方。因此仅需判断所有被弹出的元素中的最大值是否大于当前枚举的元素即可class Solution: def find132pattern(self, nums: List[i原创 2021-04-11 22:46:43 · 99 阅读 · 0 评论 -
[Python] [LeetCode] 剑指 Offer 52. 链表的公共节点
被秀到了判断两链表是否有交点,有则输出交点,无则输出 null这道题解法很多,最简洁的解法为:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def getIntersectionNode(self, headA: ListNode, head原创 2021-04-10 16:50:37 · 108 阅读 · 0 评论 -
Python dict类型 哈希表实现
reference:https://blog.csdn.net/qq_37049781/article/details/83959365原创 2021-04-10 16:28:43 · 135 阅读 · 0 评论 -
[Python] [LeetCode] 剑指Offer 65. 不用加减乘除做加法 (Python负数存储原理)
基本思路写出真值表,^得到当前位运算后结果,&得到进位,考虑到进位会进一步引发进位,要while循环至进位为0。由于每一位的操作相同,每次直接整体操作,无需按位操作。注意的点Python中的负数以补码形式储存,这就意味着其高位有无穷个1。此题限制在32位有符号整数的语境中,因此开头先用0x7FFFFFFFF获取0 ~ 32位,运算后判断是否为负数,如果为负数则需补齐高位的所有1。补齐方法:直接用 ~ 会将运算结果也取反,因此先对0 ~ 32位取反,再全部取反,相当于对32位之后全部取反。妙原创 2021-04-10 14:58:21 · 107 阅读 · 0 评论