python leetcode 251-260

class Vector2D:
    def __init__(self, v: List[List[int]]):
        self.vector = v
        self.inner = 0
        self.outer = 0
    def advance_to_next(self):
        while self.outer < len(self.vector) and self.inner == len(self.vector[self.outer]):
            self.outer += 1
            self.inner = 0  
    def next(self) -> int:
        self.advance_to_next()
        result = self.vector[self.outer][self.inner]
        self.inner += 1
        return result
    def hasNext(self) -> bool:
        self.advance_to_next()
        return self.outer < len(self.vector)
# 252
class Solution:
    def canAttendMeetings(self, intervals: List[List[int]]) -> bool:
        n = len(intervals)
        if n < 2:
            return True
        A = sorted(intervals)
        for i in range(1 , n):
            if A[i][0] < A[i - 1][1]:
                return False
        return True
# 253
class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        tmp = []
        for i in intervals:
            tmp.append([i[0] , 1])
            tmp.append([i[1] , -1])
        res = 0
        tmp1 = 0
        A = sorted(tmp)
        for i in A:
            tmp1 += i[1]
            res = max(tmp1 , res)
        return res
# 254
class Solution:
    def getFactors(self, n: int) -> List[List[int]]:
        if n < 0:
            return []
        res = []
        def dfs(n , i , tmp):
            for j in range(i , int(n**0.5) + 1):
                if n % j == 0:
                    res.append(tmp + [n//j , j])
                    dfs(n//j , j , tmp + [j])
        dfs(n , 2 , [])
        return res
# 255
class Solution:
    def verifyPreorder(self, preorder: List[int]) -> bool:
        stack = []
        parent = float('-inf')
        for num in preorder:
            if num < parent:
                return False
            while stack and stack[-1] < num:
                parent = stack[-1]
                stack.pop()
            stack.append(num)
        
        return True
# 256
class Solution:
    def minCost(self, costs: List[List[int]]) -> int:
        if not costs:
            return 0
        dp = costs
        for i in range(1 , len(costs)):
            dp[i][0] = min((dp[i][0] + dp[i - 1][1]) , dp[i][0] + dp[i - 1][2])
            dp[i][1] = min((dp[i][1] + dp[i - 1][0]) , dp[i][1] + dp[i - 1][2])
            dp[i][2] = min((dp[i][2] + dp[i - 1][0]) , dp[i][2] + dp[i - 1][1])
        return min(dp[-1])
# 257
class Solution:
    def binaryTreePaths(self, root: TreeNode) -> List[str]:
        if not root: 
            return []
        res = []
        def helper(root , tmp):
            if not root.right and not root.left:
                res.append(tmp + [str(root.val)])
            if root.left:
                helper(root.left , tmp + [str(root.val)])
            if root.right:
                helper(root.right , tmp + [str(root.val)])
        helper(root , [])
        return ['->'.join(a) for a in res]
# 258
class Solution:
    def addDigits(self, num: int) -> int:
        while True:
            res = 0
            for i in str(num):
                res += int(i)
            if res < 10:
                return res
            num = res
# 259
class Solution:
    def threeSumSmaller(self, nums: List[int], target: int) -> int:
        nums.sort()
        res = 0
        for i in range(len(nums)):
            l , r = i + 1 , len(nums) - 1
            t = target - nums[i]
            while l < r:
                if nums[l] + nums[r] >= t:
                    r -= 1
                else:
                    res += r - l
                    l += 1
        return res
# 260
def singleNumber(self, nums: List[int]) -> List[int]:
        A = {}
        res = []
        for i in nums:
            if i not in A:
                A[i] = 1
            else:
                A[i] += 1
        for X,Y in A.items():
            if Y == 1:
                res.append(X)
        return res

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值