[Leetcode] 每日两题 2045 977 -day81

2045. 到达目的地的第二短时间

在这里插入图片描述

BFS +剪枝

通过一个list 来记录 从i 从到该节点最近的两个距离 ,对于后续拓展到的节点不满足次最近的,就忽略,

class Solution:
    def secondMinimum(self, n: int, edges: List[List[int]], time: int, change: int) -> int:

        dmap = defaultdict(set)
        for edge in edges:
            dmap[edge[0]].add(edge[1])
            dmap[edge[1]].add(edge[0])
        numof =[[inf]*2 for _ in range(n+1)]
        que = [(1,0)]
        while que:
            node,nt = que.pop(0)
            if (nt//change)%2 == 1:
                nt = ((nt//change)+1) *change 
            for ano in dmap[node]:

                if nt+time <numof[ano][0]:
                    numof[ano][0] =nt+time
                elif nt+time >numof[ano][0] and nt+time<numof[ano][1]:
                    numof[ano][1] =nt+time
                    if ano ==n:
                        return nt+time
                else :
                    continue
                que.append((ano,nt+time)) 
        return -1
977. 有序数组的平方

在这里插入图片描述

双指针 +归并

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        res =[]    
        flag =0
        for i in range(len(nums)):
            if nums[i]>= 0:
                flag = i
                break

        zer =nums[:i]
        one =nums[i:]
        while zer and one:
            if (zer[-1]*zer[-1])>(one[0]*one[0]):
                res.append(one[0]*one[0])
                one.pop(0)
            else :
                res.append(zer[-1]*zer[-1])
                zer.pop()
        while zer:
            res.append(zer[-1]*zer[-1])
            zer.pop()
        while one:
            res.append(one[0]*one[0])
            one.pop(0)
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值