Leetcode 3027. Find the Number of Ways to Place People II

  • [Leetcode 3027. Find the Number of Ways to Place People II](#Leetcode 3027. Find the Number of Ways to Place People II)
    • [1. 解题思路](#1. 解题思路)
    • [2. 代码实现](#2. 代码实现)

1. 解题思路

这一题的话我也没想到啥特别好的思路,采用的纯粹是遍历+剪枝的思路。

遍历的话好理解,对于 N N N个位置当中要找到任意两个位置作为Takina和Chisato的位置,一共就是 O ( N 2 ) O(N^2) O(N2)的算法复杂度,然后就是要判断这两个位置是否合法,这个至多又会引入 O ( N ) O(N) O(N)的算法复杂度,一共可能就变成了 O ( N 3 ) O(N^3) O(N3)的算法复杂度,明显太多了......

因此,我们就是在这里做了一下剪枝,首先的话,就是我们将坐标拍了个序,按照题意要求,两个点一个要在左上角,一个要在右下角,因此,我们将坐标按照 ( x , − y ) (x, -y) (x,−y)进行逆序排列,此时必然左上角的点会出现右下角的点的前方,且如果他们的区间当中有其他点的话,这个点只能出现在他们之间。

此时,我们发现提交的代码就能够通过所有测试样例了,感觉应该还能够优化,不过这里暂时就没往下深挖了,凑合着就算是做出来了吧,LOL

2. 代码实现

给出python代码实现如下:

python 复制代码
class Solution:
    def numberOfPairs(self, points: List[List[int]]) -> int:
        points = sorted(points, key=lambda x: (x[0], -x[1]))
        n = len(points)
        ans = 0
        for i in range(n-1):
            a, b = points[i]
            for j in range(i+1, n):
                c, d = points[j]
                if b < d:
                    continue
                elif any(a <= e <= c and d <= f <= b for e, f in points[i+1:j]):
                    continue
                ans += 1
        return ans

提交代码评测得到:耗时6105ms,占用内存17MB。

相关推荐
余俊晖2 天前
多模态文档理解视觉token剪枝思路
人工智能·算法·剪枝·多模态
Pluchon2 天前
硅基计划4.0 算法 二叉树深搜(DFS)
java·数据结构·算法·leetcode·深度优先·剪枝
Espresso Macchiato3 天前
Leetcode 3715. Sum of Perfect Square Ancestors
算法·leetcode·职场和发展·leetcode hard·树的遍历·leetcode 3715·leetcode周赛471
小欣加油4 天前
leetcode 329 矩阵中的最长递增路径
c++·算法·leetcode·矩阵·深度优先·剪枝
Espresso Macchiato6 天前
Leetcode 3710. Maximum Partition Factor
leetcode·职场和发展·广度优先遍历·二分法·leetcode hard·leetcode 3710·leetcode双周赛167
让我们一起加油好吗7 天前
【基础算法】DFS中的剪枝与优化
算法·深度优先·剪枝
闻缺陷则喜何志丹10 天前
【剪枝 贪心 回溯】B4093 [CSP-X2021 山东] 发送快递|普及+
c++·算法·剪枝·贪心·洛谷
Espresso Macchiato15 天前
Leetcode 3700. Number of ZigZag Arrays II
动态规划·leetcode hard·矩阵乘法·leetcode 3700·leetcode周赛469
Miraitowa_cheems15 天前
LeetCode算法日记 - Day 62: 黄金矿工、不同路径III
数据结构·算法·leetcode·决策树·职场和发展·深度优先·剪枝
Espresso Macchiato16 天前
Leetcode 3695. Maximize Alternating Sum Using Swaps
并查集·leetcode hard·dsu·uf·leetcode 3695·leetcode双周赛166