12月16号 378,386

两道题都不怎么难……下一道题太长了,明天再说吧

378. Kth Smallest Element in a Sorted Matrix

这道题其实和373. Find K Pairs with Smallest Sums基本一样,虽然题目不一样,但是解题的方式一样。

给定一个matrix,其中他的行和列都是从小到大排列,求第k个小的数。

代码如下:

from heapq import heappush, heappop

class Solution(object):
    def kthSmallest(self, matrix, k):
        """
        :type matrix: List[List[int]]
        :type k: int
        :rtype: int
        """
        if k == 0 or not matrix or not matrix[0]:
            return
        m, n, seen = len(matrix), len(matrix[0]), set()
        h = [(matrix[0][0], (0, 0))]
        for _ in range(min(k, m*n)):
            val, (i, j) = heappop(h)
            res = val    
            if i+1<m and (i+1, j) not in seen:
                heappush(h, (matrix[i+1][j], (i+1, j)))
                seen.add((i+1, j))
            if j+1<n and (i, j+1) not in seen:
                heappush(h, (matrix[i][j+1], (i, j+1)))
                seen.add((i, j+1))
        return res

386. Lexicographical Numbers

将小于n的数字按照字典顺序排序,原来是19 要大于 8的,现在的话19要排在前面,因为第一位是1。

其实偷懒的话直接转化为字符然后进行排序就可以了,一行代码就够了。

当然正确做法应该也差不多。

代码如下:

class Solution(object):
    def lexicalOrder(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        return list(map(int, sorted(list(map(str, range(1, n+1))))))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值